React Grid与Redux集成:网格排序时Redux状态未更新问题排查
解决React Grid + Redux排序时Store未更新的问题
核心问题出在你的changeSorting方法没有正确接收并传递最新的排序状态,而是一直复用旧的状态值,导致Redux Store没有得到更新的触发信号。
问题分析
看你的SortingState组件:
<SortingState sorting={grid.sorting} onSortingChange={this.changeSorting.bind(this)} />
onSortingChange回调会在用户触发排序操作时,自动传递最新的排序状态对象作为参数,但你的changeSorting方法完全没接收这个参数,反而把当前props里的旧grid.sorting传给了action:
changeSorting() { this.props.createGridAction('sorting', this.props.grid.sorting); }
这就导致每次触发排序时,你都在把旧状态重新dispatch一次,Redux Store自然不会有任何变化,网格也就无法响应排序操作。
修复方案
修改changeSorting方法,接收最新的排序状态参数,并把这个新值传给action:
changeSorting(newSortingState) { this.props.createGridAction('sorting', newSortingState); }
同时,为了避免bind带来的不必要重复创建函数,你可以选择更简洁的实现方式:
方式1:构造函数提前绑定
class Phases extends Component { constructor(props) { super(props); this.changeSorting = this.changeSorting.bind(this); } changeSorting(newSortingState) { this.props.createGridAction('sorting', newSortingState); } // ... 其余渲染代码 }
方式2:直接用箭头函数回调
<SortingState sorting={grid.sorting} onSortingChange={(newSorting) => this.props.createGridAction('sorting', newSorting)} />
这种方式可以直接省略changeSorting方法,逻辑更直观。
验证逻辑
修改后,当用户点击表头排序时:
SortingState会生成最新的排序状态并传递给回调- 回调把新状态传给Redux Action
- Reducer接收到新值,更新Store里的
phases_grid.sorting - 组件通过
mapStateToProps拿到更新后的状态,重新渲染Grid,完成排序
你的Reducer逻辑是正确的,只要传递的是新状态,就能正常更新Store。
内容的提问来源于stack exchange,提问作者Glen Padua
相关产品推荐
相关产品推荐

