扫码一下
查看教程更方便
一个 atom 表示 recoil 的 state。atom()
函数返回一个可写的 recoilstate 对象。
unction atom({
key: string,
default: t | promise | recoilvalue,
effects_unstable?: $readonlyarray>,
dangerouslyallowmutability?: boolean,
}): recoilstate
recoil 管理 atom 的 state 变化,以便通知订阅该 atom 的组件何时重新渲染,所以你需使用下面列出的钩子函数来改变 atom 的 state。如果一个存储在 atom 中的对象被直接 mutated,它可能会绕过钩子,在没有正确触发订阅的情况下导致 state 的变化,为了帮助大家检测 bug,recoil 会在开发模式下 freeze 存储在 atom 中的对象。
通常,你需要使用以下 hook 来与 atom 搭配使用。
在一些罕见的场景下,你需要在不订阅组件的情况下读取 atom 的值,请参考 userecoilcallback()
。
可以使用 promise 或者表示相同类型值的 recoilvalue。因为 promise 会是 pending 状态,而默认的 selector 也可能是异步的,因此 atom 的值也可以是 pending 状态,或者在读取值的时候抛出异常。注意设置 atom 时,你不能对 promise 实时赋值。对于异步函数,请使用 selectors 。
atom 不能用来直接存储 promise 或 recoilvalue,但是可以用对象包装它们。注意 promise 是可变的。atoms 可以设置为纯函数,如果你这么做,你需要使用更新器组成 setter。(例如: set(myatom, () => myfunc);
)。
import {atom, userecoilstate} from 'recoil';
const counter = atom({
key: 'mycounter',
default: 0,
});
function counter() {
const [count, setcount] = userecoilstate(counter);
const incrementbyone = () => setcount(count 1);
return (
count: {count}
);
}
atomfamily()
对于存储一系列的相关状态以及 划分你 atom 状态的作用域 来说,非常有用。