我想知道是否可以将一个函数存储为jotai原子,并且如果可以,如何实现。当状态的值是数组时,简单地复制创建和使用jotai
原子状态的标准模式是可行的,但当状态的值是一个函数时,这种方法就不起作用了。
"./jotaiStore.js"
import { atom } from "jotai";
function test(x) {return x + 4;}
let testa = atom(test);
export { testa };
./App.js
import { testa } from "./jotaiStore.js";
import { useAtom } from "jotai";
export default function App() {
const [locTest, locSetTest] = useAtom(testa);
console.log(locTest);
console.log(locTest(1));
return (
<div className="App">
</div>
);
}
请参见https://codesandbox.io/s/thirsty-brook-n1ucjr?file=/src/App.js:24-493。
console.log(locTest)
的结果如下:function (a) {
dependencies.add(a);
var aState = a === atom ? getAtomState(version, a) : readAtomState(version, a);
if (aState) {
if ('e' in aState) {
throw aState.e;
}
if ('p' in aState) {
throw aState.p;
}
return aState.v;
}
if (hasInitialValue(a)) {
return a.init;
}
throw new Error('no atom init');
}4
而console.log(locTest(1))
会生成错误“locTest不是函数”。
编辑:我找到了一种将函数存储为jotai状态的方法(请参见下文),但不知道如何更新。如果有其他人有更好的可更新解决方案,我仍然非常感兴趣。