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 或执行任何其他操作即可使示例正常工作。
我有一个正在工作的 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 或执行任何其他操作即可使示例正常工作。