整合刷新与默认值

可刷新 atom 通常被用来实现内容的异步加载,这种操作在网络中断等情况出现的时候,常常无法获取应有的结果,所以这时为可刷新 atom 提供一个回退的默认值就非常有用了。

一下提供一个根据可刷新 atom 创建带默认值的 atom 的函数。

const atomWithRefreshAndDefault = (refreshAtom, getDefault) => { const overwrittenAtom = atom(null); return atom( (get) => { const lastState = get(overwrittenAtom); if (lastState && lastState.refresh === get(refreshAtom)) { return lastState.value; } return getDefault(get); }, (get, set, update) => { set(overwrittenAtom, { refresh: get(refreshAtom), value: update }); } ); };

这个 atom 创建函数的使用需要借助于另外的一个可刷新 atom 和一个原始 atom。其使用方法如下所示。

const baseAtom = atom(1); const refreshCountAtom = atom(0); const dataAtom = atom( (get) => { get(refreshCountAtom); return get(baseAtom); }, (get, set, update) => { set(baseAtom, update); } ); const refreshableAtom = atomWithRefreshAndDefault( refreshCountAtom, (get) => get(dataAtom) * 2 );