【问题标题】:Redux store access from components来自组件的 Redux 存储访问
【发布时间】:2017-07-15 18:10:01
【问题描述】:

我有一个使用 redux 的反应应用程序。我正在使用连接到 mapStatetoProps 和 mapDispatchtoProps。一切正常,我可以调用动作并将它们传递给我的减速器,然后设置状态。然后我可以使用 props 访问状态,因为我的应用程序包裹在 react 的 Provider 周围。

我的问题是概念性的。

  1. 是否可以在我的应用程序启动时自动填充 store,以便调用 props 访问最初加载的数据?
  2. 为什么一个动作会触发所有 reducer 函数?不应该只触发被调用action对应的reducer吗?
  3. 如果调用了特定的 reducer,它所做的状态更改不应该通过 props 对所有组件都可用吗?

【问题讨论】:

    标签: react-redux


    【解决方案1】:
    1. 通常您在减速器中指定初始状态,就像这样
    function reducer(state = initialState, action) { ... }
    

    如果您的初始状态是异步加载的,那么您还需要其他东西,可能会添加微调器或推迟创建商店和渲染应用程序。

    1. 您只能订阅整个商店,而不能订阅该州的个别部分。动作和减速器之间没有映射。这样做有好处,也有坏处。好处是您只有 1 个订阅点,这大大增加了简单性。 connect 会根据当前和之前的 props 自动处理组件是否需要重新渲染和更新。缺点是速度不太好,我之前也做过一些基准测试,但还是可以接受的。

    2. 只有当它们的 mapStateToProps 部分状态发生变化时,组件才会更新。这减少了不必要的更新,因此,如果组件依赖于它们,请始终在 mapStateToProps 中提供这些状态部分。

    【讨论】:

    • 对于 1:我将初始状态默认为空对象。这个想法是让它从组件中的动作调用中填充。问题是我在 componentWillMount 中调用了该操作。调用之后,我不确定如何通过从 componentWillMount 中调用 props 来访问由 action 调用创建的新状态。我已经尝试访问 componentDidMountn 中的状态,但到那时为时已晚。我也尝试在 componentWillReceiveProps 中访问它,但最初并没有调用它。我认为我的 react/redux 生命周期有问题。
    • 你应该可以在componentWillReceiveProps保持新状态
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2018-06-20
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    相关资源
    最近更新 更多