SolidJS:如何触发 createResource 的重新获取?

SolidJS: How to trigger refetch of 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>

但这不起作用,警报会在后续尝试时触发,但未定义为 arg,并且数据没有任何反应。

解决这个问题的 SolidJS 方法是什么?

我认为这里的问题是信号每次都设置为 false。由于 programmingOnly 是一个信号,因此应将其作为函数访问以检索其值。

即..

setProgrammingOnly(!programmingOnly)

// should be
setProgrammingOnly(!programmingOnly())

您不需要调用 refetch 或执行任何其他操作即可使示例正常工作。