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

react / redux: components fetching data from state without making the API call to get that data

我正在开发 redux/react 应用程序。我们从很少的 "connected" 个组件开始(即,访问 redux 状态和直接调度操作的组件)。这导致每个组件都将太多的 props 传递给它们的所有子组件和子组件等,并且顶级 "connected" 组件成为上帝 类.

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

我的问题是,假设子组件的父组件发送了实际 API 调用以将该数据放入状态树的操作,子组件是否可以从状态树获取数据?

举个具体的例子,使用经典的"blog" app:

<blog id=123/> 组件将呈现博客 post。它将进行 API 调用,一次性获取博客及其嵌套评论 JSON.

该组件将呈现一个 <comments blog_id=123 /> 组件。该子组件是否可以假设父组件已处理 API 调用以获取博客及其嵌套评论,因此只需从状态树中获取评论,如果数据尚不存在(即 API 调用仍在进行中)?

如果不是,这里还有什么选择?

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

所以问题是,组件说 "I'll render stuff from the state tree - but whoever uses me must make the API call in order for me to work properly"

是不好的做法吗

当然可以。这就是我的处理方式。

对于您的示例,child 组件在将适当的道具传递给它或状态连接到它之前不会呈现任何内容。您可以将其传递给此 child 或从 Redux 状态树中获取它,无论您的情况如何。

如果有很多child组件或者目标child在children的深处,我通常会尽量避免传递道具。通过将状态从 child 向下传递到 child 等等,从状态树中获取它的道具可能是理想的并且不那么麻烦。

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