react / redux:组件从状态获取数据而不进行API调用以获取该数据

时间:2017-01-24 01:30:10

标签: reactjs redux react-redux

我正在使用redux / react应用程序。我们开始的时候很少有"连接"组件(即访问redux状态和直接调度操作的组件)。这导致每个组件传递太多道具给他们所有的孩子,子孙等,以及顶级"连接"成分成为上帝阶级。

因此,我们正在连接更多组件,并且能够通过mapStateToPropsmapDispatchToProps直接访问redux状态和调度操作。它更好,并由丹阿布拉莫夫在这里推荐:https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.lye71jwmx

我的问题是,子组件是否可以从状态树中获取数据,假设它的父级已经发送了进行实际API调用的操作以将该数据提取到状态树中?

举一个具体的例子,使用经典的#34;博客"应用程式:

<blog id=123/>组件将呈现博客帖子。它将进行一次API调用,在一次点击中,将博客和它的嵌套注释作为JSON提取。

该组件将呈现<comments blog_id=123 />组件。该子组件是否可以假设父组件已经处理了API调用来获取博客及其嵌套注释,因此只需从状态树中获取注释,并优雅地呈现任何内容,如果数据还没有存在(即API调用仍在进行中)?

如果没有,那么替代方案是什么?

我理解在这个人为的例子中,你可能只是将评论作为道具传递下来。但在我的现实生活中,它要复杂得多。

所以问题是,组件说&#34;我是否会从状态树中渲染内容 - 这是不好的做法 - 但是任何使用我的人都必须进行API调用以便我正常工作&#34;

1 个答案:

答案 0 :(得分:1)

当然可以。这就是我如何接近它的方式。

使用您的示例,子组件不会呈现任何内容,直到相应的道具传递给它或状态连接到它。你可以将它传递给这个孩子,或者从Redux状态树中获取它,这在你的情况下是有用的。

如果有很多儿童成分,或者目标儿童在儿童深处,我通常会尽量避免传递道具。从状态树中取出它的道具,从孩子到孩子等等,这可能是理想的,也不那么麻烦。

利用mapStateToProps函数仅传递已定义的道具,并允许组件呈现已经给出的内容。