javascript - 通过在组件内部执行函数来响应 redux 状态变化
问题描述
我目前正在尝试redux
第一次实现我的 react-app。
我创建了一个减速器,与 redux 连接反应并在组件 A 中设置一个动作 - 到目前为止一切都很好。但是如何监听组件 B 内部的状态变化呢?
像这样的东西:
changes.subscribe(value => {
if (value === 1) {
this.runSpecificFunction();
}
});
换句话说,我想订阅更改,并通过在组件 B 中执行一些函数来对它们做出反应。我该怎么做?
到目前为止我对组件 B 的了解 - 接收组件:
const mapStateToProps = state => {
return {
nav: state.navigation
};
};
export default connect(mapStateToProps)(withRouter(CartHolder));
减速器:
const initialState = {
navigation: 0 // inactive
};
const rootReducer = (state = initialState, action) => {
switch (action.type) {
case 'START_NAVIGATION':
return {
navigation: action.value
};
case 'STOP_NAVIGATION':
return {
navigation: action.value
};
default:
return state
}
};
export default rootReducer;
解决方案
任何状态更改(基于或不基于 redux)都会重新渲染您的子组件。所以使用useEffect
钩子应该适合你的用例(https://reactjs.org/docs/hooks-effect.html)。
在您的示例中是这样的:
const CartHolder = () => {
React.useEffect(() => {
myCallbackFunction(nav);
}, [nav]);
return (...);
};
推荐阅读
- jsf - window.close() 来自 backing bean
- node.js - nodejs风帆sybase连接错误
- c++ - ZMQ_CONFLATE 套接字选项导致不接收任何消息
- go - 使用自定义 Golang 库计算算术平均值
- sql-server - 在表和函数的值之间查找
- kubernetes - 无法在我的 Mac 机器上启动 minikube
- php - 在 emulate prepares 设置为 true 的情况下调用 mysql 存储过程是否不安全?
- java - 使用 LocalDateTime 字段将 JSON 反序列化为对象
- python - django 通过 View.py 查看 Model.py 字段
- crystal-reports - Crystal Reports 中的多个详细信息部分