Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过在组件内部执行函数来响应重复使用状态的更改_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript 通过在组件内部执行函数来响应重复使用状态的更改

Javascript 通过在组件内部执行函数来响应重复使用状态的更改,javascript,reactjs,redux,Javascript,Reactjs,Redux,我目前正在尝试首次对我的react应用程序实现redux 我创建了一个reducer,将react与redux连接起来,并在组件a中设置了一个操作-到目前为止还不错。但是,我如何倾听组件B内部的状态变化呢 大概是这样的: changes.subscribe(value => { if (value === 1) { this.runSpecificFunction(); } }); 换句话说,我想订阅更改,并通过在组件B内部执行一些函数来响应更改。我如何才能做

我目前正在尝试首次对我的react应用程序实现
redux

我创建了一个reducer,将react与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或不基于redux)都将重新呈现子组件。因此,使用
useffect
钩子应该适合您的用例()

在您的示例中类似于此:

const CartHolder = () => {
  React.useEffect(() => {
    myCallbackFunction(nav);
  }, [nav]);

  return (...);
};

您无需在任何地方调用
subscribe
。在
connect
中包装的每个组件都将订阅到您的存储,并在每次存储更改时重新呈现
更改的内容
?如果它是一个redux存储,那么为什么处理函数希望向它传递一个参数?如果您希望一个组件根据状态更改执行某些操作,那么只需连接、componentDidUpdate和componentDidMount,或者使用Selector,对使用hooks@azium
将在每次存储更改时重新渲染
:不正确,如果mapStateToProps返回的内容发生更改,它将重新渲染,如果使用useSelector,当选择器返回的内容发生更改时,它将重新渲染。因为OP有一个mapStateToProps,它每次返回一个新对象时,它都会在状态发生任何变化时重新渲染。@HMR
changes
只是我刚刚编出来的一个属性——我想象它是如何工作的。如何在redux状态更改时启动函数?