使用 redux 时应该如何在 react 组件中取消订阅?

IT技术 javascript reactjs redux
2021-05-03 16:26:13

在我的组件中,我有以下内容:

componentWillMount: function () {
  this.unsubscribe = store.subscribe(function () {
    this.setState({message: store.getState().authentication.message});
  }.bind(this));
},

componentWillUnmount: function () {
  this.unsubscribe();
},

不调用取消订阅会导致以下错误:

警告:setState(...):只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了 setState()。这是一个无操作。

我想知道的是我应该分配unsubscribe给它this还是有更好的地方来分配它?

1个回答

正如上面Salehen Rahman在评论中提到的,我最终使用了react-redux

按照他们的文档,我创建了两个函数,一个将“全局状态”映射到组件内的props:

function mapStateToProps(state) {
  return {
    users: state.users.items
  };
}

还有一个将分派的动作映射到作为props传递给组件的函数:

function mapDispatchToProps(dispatch) {
  return {
    lockUser: (id) => dispatch(actions.lockUser(id)),
    unlockUser: (id) => dispatch(actions.unlockUser(id)),
    updateUser: (id, user) => dispatch(actions.updateUser(id, user)),
    addUser: (user) => dispatch(actions.addUser(user))
  };
}

然后使用以下connect方法将所有内容拉到一起

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

我有一种感觉,所有这些在幕后所做的都是将unsubscribe方法附加到组件上,但它确实大大简化了事情。