React JS如何避免深度回调

时间:2017-08-29 09:08:15

标签: javascript reactjs

我的问题是"当我想访问/响应子组件数据时,有没有办法避免在树的深处发送回调#34;。

我有一个组件Application,其中包含子组件Person,而子组件TraitCollection又包含子组件Trait,而子组件Trait又包含子组件Application

更改Application后,我想将数据发送回PersonList,转发给名为Application的{​​{1}}中的另一个孩子。

我目前的解决方案是将回调作为道具发送给每个孩子。每个回调函数构造并追加最终到达PersonList的数据,并将其作为支柱传递给<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <html> <head> <title>Updating the Total Number of the total rows</title> <script type="text/javascript" src="/Cesium-1.34/ThirdParty/jquery-1.11.3.min.js"></script> </head> <body> <div id="totalattack"></div> <script type="text/javascript"> function totalAttacks(val) { $('#totalattack').html(val); } $(document).ready(function() { var timer = setInterval(function() { $.get({ url: 'calculateTotalAttack.php', dataType: 'text', success: totalAttacks }); console.log('requesting changes'); }, 5000); }); </script> </body> </html>

我可以想象&#34;添加更多级别&#34;,或者在更小的部分中拆分组件会使这个回调链更加复杂。

有没有其他方法可以做到这一点,或者这是处理从React中的子节点传递给父节点的数据的最佳方法?

3 个答案:

答案 0 :(得分:1)

您处理它的方式是推荐方式和最类似React。除了你发现的问题之外,这种方法本身没有任何问题。看起来Redux可以帮助您解决这个问题。 Redux允许您将React应用程序的状态与公共存储的使用以及基于动作创建者,操作和缩减器的良好设计模式统一起来。

答案 1 :(得分:0)

您可以直接使用React Context https://facebook.github.io/react/docs/context.html,但更好的选择是使用React-Redux,它将允许您避免传递回调,并且您将能够从任何组件更改任何组件的状态(连接到商店)具有调度功能。

答案 2 :(得分:0)

文档直接回答:

<块引用>

在大型组件树中,我们推荐的替代方法是通过上下文从 useReducer 传递一个调度函数

来自:https://reactjs.org/docs/hooks-faq.html#how-to-avoid-passing-callbacks-down (Archive)