当前位置: 首页 > 知识库问答 >
问题:

如何从redux商店退订时,组件将卸载?如何装修还原连接?

毋琪
2023-03-14

我将下面的道具(store Name)传递给我的组件:

<MyComponent reducerName="city" />

我想用动态名称(this.props.reducerName)连接到存储

例如

export default connect(state => ({
    some: state[this.props.reducerName]
}), { })(MyComponent);

如何装饰redux connect,或者我必须做什么?

我试图跳过redux连接并使用store.subscribe

componentDidMount() {
    store.subscribe(() => {
        this.setState({some: store.getState([this.props.reducerName]});
    });
}

但当我移动到另一页时,我看到以下错误:

警告:设置状态(…):只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了setState()。这是禁止的。

如何从redux商店退订时,组件将卸载?

共有2个答案

窦华晖
2023-03-14

connect还有第二个参数ownProps,它是一个包含所有传入的props的对象。您可以这样做:

const mapStateToProps = (state, { reducerName = 'defaultReducer' }) => ({
  some: state[reducerName],
});

export default connect(mapStateToProps)(MyComponent);
阎麒
2023-03-14

要取消订阅,您可以简单地执行函数返回store.subscribe

componentDidMount() {
  this.unsubscribe = store.subscribe(() => {
    // ...
  });
}
componentWillUnmount() {
  this.unsubscribe();
}
 类似资料:
  • 我正在创建一个react组件,以基于lat/long坐标列表在地图上显示标记。 使用谷歌地图反应npm包,我有一个容器组件和一个地图组件。MapsContainer组件被包装在GoogleApiComponent HOC中,如下所示。 我现在需要做的是将这个MapContainer组件连接到用于lat/long组件列表的redux存储。我试过了 和 每次我收到以下警告并且我的贴图不渲染时:

  • 我正试着和redux thunk联系 我如何让调度从商店返回promise? 更具体地说: 我可能只是不理解这里的一些内容,但在所有使用的示例中,它们调用一个单独的异步事件(比如),它显然会返回一个。 我特别想要的是当我向商店发送一个动作时:我如何确保商店在上面的函数中发生任何其他事情之前,已经完全处理了该动作。 理想情况下,我希望商店能回报一些promise,但我不明白这是怎么发生的,在哪里发生

  • 问题内容: 在我的组件中,我具有以下内容: 不调用取消订阅会导致以下错误: 警告:setState(…):只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了setState()。这是无人值守。 我想知道的是我应该分配给它,还是有更好的分配空间? 问题答案: 正如Salehen Rahman在上面的评论中提到的,我最终还是使用react-redux。 根据他们的文档,我创建了两个函

  • 问题内容: 我的Jenkins安装中有一些不再需要的插件。我已经禁用了插件(并且我的构建仍然可以使用),并且我想完全删除插件。完全删除Jenkins(Hudson)插件的正确过程是什么? 问题答案: 就像Je​​sseGlick在他的回答中提到的那样,如果您使用的是Jenkins 1.487或更高版本,则可以通过本机方式在JenkinsUI中卸载插件。有关详细信息,请参见JENKINS-3070。

  • 问题内容: 我用来对我的React组件进行单元测试。我知道,为了测试原始未连接的组件,我只需要导出它并对其进行测试(我已经做到了)。我已经设法为连接的组件编写了一个测试,但是我真的不确定这是否是正确的方法,以及我究竟想对连接的组件进行什么测试。 Container.jsx Container.test.js 问题答案: 这是个有趣的问题。 我通常会同时导入容器和组件以进行测试。对于容器测试,我使用

  • 我有一些“ChangeMainItem”操作(在我的例子中,它是由外部系统或可能的组件之一调度的)。此操作(例如)仅更新reducer中状态的一个属性(例如)。 我的组件A和B需要对此状态更改做出反应:显示加载指示器、获取其他数据并显示结果。顺序动作可以通过一些异步动作库来完成,但是我应该把调度异步动作放在哪里呢?显然,我不能在组件A和B的reducer中分派异步操作,我也不想将原始操作更改为异步