在react-redux中,任何组件都可以从商店请求当前状态吗?

时间:2016-06-16 18:20:48

标签: reactjs redux react-redux

比如说,一个组件需要访问当前状态,它可以随时直接从商店请求当前状态吗?这意味着它是商店和任何组件之间的双向?我在数据流图中有点迷失,我总是看到从商店到组件只有一个箭头。

提前谢谢!

3 个答案:

答案 0 :(得分:4)

React和redux / flux中的总体范例是单向数据流。组件从不"问"对于商店中的任何内容,而是在商店更改时,所有组件都会收到新数据的通知。如果数据需要更改组件,React会照顾到这一点。

与jQuery之类的东西不同,你说'#34;当这个值改变时,找到这个元素并改变它",在React中你说"这是我的元素应该在任何给定的样子时刻"和React做了改变。

作为开发人员,您现在不再需要考虑组件何时以及如何更改,您只需告诉他们应该是什么样子,并且他们需要根据他们所需的数据进行更改给出。

答案 1 :(得分:1)

您的单向数据流箭头是正确的。

任何时候,任何React组件或任何其他类型的组件类型都可以使用store.getState()请求应用程序的当前状态。 (http://redux.js.org/docs/api/Store.html)。

这不是双向的,因为你不能直接改变商店数据。您可以调度由reducers处理的操作,这些操作通过状态树渗透更新。

@component装饰器和Provider项目中的react-redux组件是特定于React的实用程序,它们订阅存储状态更改事件,并触发组件重新呈现。

答案 2 :(得分:1)

假设您正在使用react-redux绑定,则表示比store.getState()更简洁,成本更低的方式:the connect

从文档中,Connect返回

  

一个React组件类,它根据指定的选项将状态和动作创建器注入到组件中。

比如说,你想从你state组件中的商店Login抓住当前用户,你可以做这样的事情(这里没有动作创作者,只是声明):

function mapStateToProps(state, ownProps) {
  return {
    user: state.user
  };
}

function mapDispatchToProps(dispatch) {
  return {
   actions: bindActionCreators(loginActions, dispatch)
 };
}

export default connect(mapStateToProps, mapDispatchToProps)(Auth);

为了让connect在你的道具中注入状态,你必须将mapStateToProps传递给它。如果你没有给它任何参数,它只会默认注入dispatch

此方法与智能(或容器)/哑(或表示)组件模式非常吻合。您可以在有状态容器中使用connect,使表示组件无状态。