在我的组件中,我具有以下内容:
componentWillMount: function () {
this.unsubscribe = store.subscribe(function () {
this.setState({message: store.getState().authentication.message});
}.bind(this));
},
componentWillUnmount: function () {
this.unsubscribe();
},
不调用取消订阅会导致以下错误:
警告:setState(…):只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了setState()。这是无人值守。
我想知道的是我应该分配给它unsubscribe
,this
还是有更好的分配空间?
正如Salehen Rahman在上面的评论中提到的,我最终还是使用react-redux。
根据他们的文档,我创建了两个函数,一个将“全局状态”映射到组件中的props:
function mapStateToProps(state) {
return {
users: state.users.items
};
}
并将分配的动作映射为作为道具传递到组件中的函数:
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
方法附加到组件上,但实际上确实简化了事情。
和 Flux 类似,Redux 也是需要注册一个回调函数 store.subscribe(listener) 来获取 State 的更新,然后我们要在 listener 里面调用 setState() 来更新 React 组件。 Redux 官方提供了 react-redux 来简化 React 和 Redux 之间的绑定,不再需要像 Flux 那样手动注册/解绑回调函数。 接下来看一下是怎么做到
问题内容: 我正在制作音频播放器。它具有暂停,倒带和时间搜索功能。如何以及由谁处理音频元素? 我可以把它放在商店旁边。我不能将其直接放在状态上,因为它可能会被克隆。然后,在减速器中,我可以与其进行交互。问题是,如果我需要将时间滑块与音频同步,则需要使用动作不断地轮询商店。从语义上讲,这也没有任何意义。 我可以创建一个自定义的React组件Audio,它可以完成我所说的一切。问题没有解决。如何刷新滑
我有一些“ChangeMainItem”操作(在我的例子中,它是由外部系统或可能的组件之一调度的)。此操作(例如)仅更新reducer中状态的一个属性(例如)。 我的组件A和B需要对此状态更改做出反应:显示加载指示器、获取其他数据并显示结果。顺序动作可以通过一些异步动作库来完成,但是我应该把调度异步动作放在哪里呢?显然,我不能在组件A和B的reducer中分派异步操作,我也不想将原始操作更改为异步
我有一个组件: 我需要在初始加载时隐藏此。如何通过点击标签来触发它的状态?
问题内容: 我一直在这里关注ReduxJS文档:React的用法 在文档末尾提到了提供程序对象的用法,我将App组件包装在提供程序中,如下所示: 但是,这就是文档的结尾。如何在组件内提取提供商提供的商店? 问题答案: 通过组件访问商店的最佳方法是使用功能,如文档中所述。这使您可以将状态和动作创建者映射到您的组件,并在商店更新时自动将它们传递给他们。此外,默认情况下,它将作为传入。这是文档中的一个示
使用react router dom,我需要为多个url使用一个组件,并使用一些道具来更改API调用以获取数据。我不知道如何将这些道具传递给组件。 我正在学习如何通过黑客攻击做出反应,但我已经被困在这上面超过4个小时了。我已经阅读了我能找到的每一篇文章,并访问了许多声称有解决我问题的方法的网站。这里发布的解决方案几乎涵盖了每一篇文章的解决方案(使用渲染)。反应路由器通行道具到路由组件 这是我的相关