SolidJS: как запустить обновление createResource?
у меня есть
createResource
который работает:
const fetchJokes = async (programmingOnly) => {
alert(programmingOnly);
return (await fetch(`https://official-joke-api.appspot.com/jokes/${programmingOnly?'programming/':''}ten`)).json();
}
//...
const [jokes, { mutate, refetch }] = createResource(programmingOnly(), fetchJokes);
Теперь я хочу изменить
programmingOnly
логическое значение через его сигнал:
const [programmingOnly, setProgrammingOnly] = createSignal(true);
//...
Programming Only: <input type="checkbox" checked={programmingOnly()}
onInput={()=>{setProgrammingOnly(!programmingOnly());refetch();}}> </input>
Но это не работает, алерт срабатывает при последующих попытках, но с неопределенным в качестве аргумента, и с данными ничего не происходит.
Как к этому подходит SolidJS?
1 ответ
Я считаю, что проблема здесь в том, что сигнал каждый раз устанавливается с ложью. С
programmingOnly
является сигналом, к которому следует обращаться как к функции для извлечения его значения.
То есть..
setProgrammingOnly(!programmingOnly)
// should be
setProgrammingOnly(!programmingOnly())
Вам не нужно вызывать refetch или делать что-то еще, чтобы пример работал.