等待有效的未知子组件编号中的值

rap-2-h

假设有一个父组件:

function Parent({ children }) {
  useEffet(() => {
    // Do something when all children 
    // have returned their values via props (or context)
  })
  return <div>{ children }</div>
}

只有在 所有孩子都做完某件事之后,我才能发挥作用吗?我不知道孩子的确切人数,可能会有所不同:

// In this example there are 4 children
function App() {
  return (
    <Parent>
      <Children />
      <Children />
      <Children />
      <div>
        <Children />
      </div>
    </Parent>
  );
}

实际的问题是,所有子代都可以准备查询(例如,ElasticSearch查询),而父代负责实际执行整个查询。

乔纳斯·威尔姆斯

好吧,我们可以将孩子们要做的动作包装成一个承诺:

  function usePromises() {
    const promises = useMemo([], []);
    const [result, setResult] = useState(undefined);

    useEffect(() => { // this gets deferred after the initialization of all childrens, therefore all promises were created already
          Promise.all(promises).then(setResult);
     }, []);


    function usePromise() {
      return useMemo(() => {
       let resolve;
       promises.push(new Promise(r => resolve = r));
       return resolve;
      }, []);
    }

   return [result, usePromise];
}

现在创建一个共享管理器(在父级内部):

  const [queries, useQueryArrived] = usePromises();
  // queries is either undefined or an array of queries, if all queries arrived this component will rerender
  console.log(queries);

然后传给useQueryArrived孩子们并在孩子们那里使用它:

  const queryArrived = useQueryArrived();

  // somewhen:
  queryArrived({ some: "props" });

现在,逻辑如下:

Parent第一次被渲染,它将创建promises数组。子级将被初始化,并且每个子级都创建一个Promise,该Promise将被附加到promisesPromise的解析器中,从而使每次子重新提交时都将返回相同的解析器。当所有子级都初始化后,React渲染并触发效果,这将接受所有promise并调用Promise.all它们。

现在,当queryArrived在子级中调用某个请求时,这些promise会解决,最后一个promise会解决某个promise,然后调用setResult所有promise的结果,这将导致Parent上的重新呈现,现在可以使用查询。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有未知值的函数有效。OCaml

如何通过未知列中的唯一值有效地更新 MySQL 行

等待C中中断的有效方法

如何访问m子中的有效载荷值?

在第一列中基于未知的相同值对numpy数组进行切片的有效方法

根据m子Dataweave中另一个列表中的值有效替换列表中的值

调用 DB 卡在等待(但从 Blazor 组件调用时有效)

哪个更有效依赖组件或子组件以及何时使用

使用嵌套的EL动态读取编号的标头值不再有效

等待连接有效

如何在Java中获取有效的子列表?

如何根据列中的值有效地解析Pandas Dataframe中的子字符串?

SQL-如何根据子组中的其他值对子组中的记录进行有效分类?

react-router-dom链接在app.js(父组件)中有效,但在子组件中不起作用

在子线程中的TextCtrl上放置值的原因并非总是有效,并会导致随机分段错误

什么是抽象xsd元素中的有效值

通过字典有效替换熊猫系列中的值

有效替换熊猫df中的值

如果值在数组中,则AngularJS输入有效

在 Oracle SQL 表中插入值的有效方法

如何确定DateTime中的值是否有效?

逗号是cookie值中的有效字符吗

从有效载荷中获取徽章值

Java中-Xmx标志的有效值

在Elixir中按值过滤地图的有效方法

Python:计算列中每个值有效的概率

有效地在词典列表中查找值

(SQL)在DataGridView中替换NULL值的有效方法?

双引号中的JSON值是有效的JSON吗?