reactjs - 如何让 React 组件检测状态对象何时更改并重新渲染?

标签 reactjs redux react-redux

我有一个 React 组件:stepA,它在提交时获取一个值,然后将其作为 state.chef_positions.[0].chef_title_id 存储在我的 redux 存储中。

用户提交步骤 A 后,他们会立即定向到步骤 B。 StepB 在stepA 的reducer 完成之前挂载,这意味着StepB 正在从存储中加载不正确的值。

当步骤A用户操作已保存到服务器/存储时,让步骤B重新渲染的正确方法是什么?重新渲染它的调度已完成?

class stepA extends React.Component {

  handleSubmit(data) {
    this.props.actions.createChefPosition(data);
    this.props.nextStep();
  }

...


class stepB extends React.Component {

  componentDidMount() {
    const title_id = this.props.chef_positions[0].chef_title_id;
    this.props.dispatch(loadChefTitleSkills(chef_title_id));
  }

  stepB.propTypes = {
    chef_positions: PropTypes.array.isRequired,
  };

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

export default connect(mapStateToProps)(stepB);

最佳答案

实际上,没什么。

由于 Redux 连接到 React 应用程序的方式是通过“一流对象”级别(您将 mapStateToProps 连接到组件),因此当存储发生更改时,组件中的 props 会被修改为当前存储状态.

您唯一需要做的就是使用 { componentDidUpdate } 生命周期方法重新分配“title_id”/在使用 title_id 的地方直接使用“this.props ...”/使用“useSelector”redux hook。

另一件事,您可以将 {mapDispatchToProps } 添加到连接

关于reactjs - 如何让 React 组件检测状态对象何时更改并重新渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44403403/

相关文章:

javascript - 如何通过对象传递 props

javascript - 在 React 中反射(reflect)更改而不刷新

reactjs - 如何使用 useEffect 从 Redux 存储中的状态更新 React UI

javascript - 在 React/Redux 中在屏幕上一一显示内容

javascript - 基于对象数组形成组件

javascript - firebase 中子项的大小

javascript - Flow 与 TypeScript Action 创建器 (Redux)

javascript - React 应用程序本地存储未设置

typescript 找不到 redux

react-native - 在 Detox 测试中加载 redux 存储初始状态