Javascript 使用反冲创建简单的状态切片
我有一个api请求,我喜欢将响应存储在反冲原子中。 我正试图找出这样做的最佳方式。 问题是我的选择器没有依赖原子,因为我的请求没有参数:Javascript 使用反冲创建简单的状态切片,javascript,reactjs,recoiljs,Javascript,Reactjs,Recoiljs,我有一个api请求,我喜欢将响应存储在反冲原子中。 我正试图找出这样做的最佳方式。 问题是我的选择器没有依赖原子,因为我的请求没有参数: const connectionsQuery = selector({ key: "Connections", get: async () => { const connections = await findConnections(); return connections; }, }); 当我执行以下
const connectionsQuery = selector({
key: "Connections",
get: async () => {
const connections = await findConnections();
return connections;
},
});
当我执行以下操作时,我发现了一个信息错误:
以下是我使用选择器的方式:
function DashboardLayout() {
const classes = useStyles();
const [isMobileNavOpen, setMobileNavOpen] = useState(false);
console.log(222);
const connections = useRecoilValue(connectionsQuery);
console.log(333);
...
...
已记录“222”控制台,但从未记录“333”
我错过了什么
const connectionsQuery = selector({
key: "Connections",
get: async ({ get }) => {
const connections = await get(findConnections);
return connections;
},
});
我想你缺少道具,
findConnections是响应请求的atom状态,真的吗?还是函数?您必须用悬念来包装组件。等待选择器意味着依赖于该选择器的值的组件将暂停渲染,直到有值为止,因为内部反冲将抛出一个承诺,这是在React中暂停的全部思想 因此,要使其正常工作,请使用悬念组件包装仪表板布局组件:
<React.Suspense fallback={<div>loading...</div>}>
<DashboardLayout/>
</React.Suspense>
这一点在报告中也有说明。
要了解更多关于并发模式和悬念的信息,你应该阅读官方文章,了解其背后的机制。正如我所见,反冲没有什么错。当findConnections中的调试器是获取连接的异步函数时,可能会发生此错误