Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用反冲创建简单的状态切片_Javascript_Reactjs_Recoiljs - Fatal编程技术网

Javascript 使用反冲创建简单的状态切片

Javascript 使用反冲创建简单的状态切片,javascript,reactjs,recoiljs,Javascript,Reactjs,Recoiljs,我有一个api请求,我喜欢将响应存储在反冲原子中。 我正试图找出这样做的最佳方式。 问题是我的选择器没有依赖原子,因为我的请求没有参数: const connectionsQuery = selector({ key: "Connections", get: async () => { const connections = await findConnections(); return connections; }, }); 当我执行以下

我有一个api请求,我喜欢将响应存储在反冲原子中。 我正试图找出这样做的最佳方式。 问题是我的选择器没有依赖原子,因为我的请求没有参数:

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中的调试器是获取连接的异步函数时,可能会发生此错误