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 или делать что-то еще, чтобы пример работал.

Другие вопросы по тегам