【问题标题】:Redux Simple Router - Change state AND URLRedux 简单路由器 - 更改状态和 URL
【发布时间】:2016-04-15 11:14:34
【问题描述】:

假设我有一些逻辑,用户可以从中选择一个选项列表。当用户选择一个选项时,应用程序状态和 URL 应该反映这个选择。我已经弄清楚了 URL 路由,但我想知道最好的策略。我想使用 redux-simple-router pushPath 并调度一个动作吗? redux-simple-router 是否有 API 可以直接通过路由更改应用程序的状态?或者我会在其他地方处理应用程序状态更改吗?代码如下:

    handleClick(value) {
        this.props.pushPath('/Options/' + value);
    }

    render() {
      return (
        <div className="container">
          <div>Search bar here</div>
           <div className={styles.tile_container}>
             {this.state.options.map(option =>
               <div name= {option.name} key={option.key}  onClick={this.handleClick.bind(this, option.name)}>{option.name}</div>
           )}
         </div>
      </div>
    );
  }

【问题讨论】:

  • 你想改变什么类型的状态?它与不同的减速器有关吗?比我猜你必须派遣行动。
  • 应用级状态。用户正在配置将在后端创建和保存的内容(“选项”)。

标签: reactjs redux react-router-redux


【解决方案1】:

在我看来,路径只是应用程序 UI 状态的粗略反映。 UI 的 structure 从路径触发,通过 React Router,但 state 应该在 Redux 中。我应该能够通过输入相同的路径来恢复 UI 状态,并且路径应该会随着 UI 状态的重大变化而改变。

所以基本上,当你想设置“检查点”或重新配置你的布局时,你想改变路由器,但你仍然需要dispatch 操作来改变 Redux 存储的状态。

【讨论】:

  • 这是有道理的。问题是调度操作和更改 URL 的最佳约定是什么?我应该在减速器中调用“pushState”吗?我只是想知道是否有一种模式可以完成这个有点常见的任务。
  • @capkutay 在 reducer 中调用 pushState 是你绝对不应该做的一件事 :) Reducer 必须保持纯净(没有副作用)。 Redux 架构和生态系统的许多其他部分都依赖于此。除此之外,这取决于你。我建议在您的异步逻辑流程中执行此操作,无论发生在哪里(动作创建者,如果您使用的是 redux-thunk,如指南中所建议的那样)。
猜你喜欢
  • 1970-01-01
  • 2019-01-03
  • 2016-10-21
  • 2020-04-26
  • 2016-11-26
  • 2018-12-08
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
相关资源
最近更新 更多