在redux状态更改后未调用React useEffect Hook



我已经创建了一个React.FunctionComponent,它应该充当孩子们的包装器,并且应该在Typescript中完成一些redux调度后立即执行一些操作,但它不起作用。我创建了包装:

import React, {useState, useEffect} from 'react'
import { useTypedSelector } from "../../Models/States";
const RoutingWrapper: React.FunctionComponent = ({children, ...rest }) => {
const state = useTypedSelector(state => state);
useEffect(() =>{
if(state.routing.routingLoaded)
{
//doStuff
}
},[state.routing])
...
return(...)
export {RoutingWrapper}

我从获得useTypedSelector钩子

import { useSelector, TypedUseSelectorHook } from "react-redux";
import { RoutingStateInterface } from "./RoutingState"; //Just Types and Interfaces
export interface RootState {
...
routing: RoutingStateInterface
}
export const useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;

在组件被渲染之后,redux魔术发生了,我希望组件等待状态改变,然后做一些事情。你知道为什么在状态改变后它不调用useEffect吗?如果我查看所有操作完成后的状态,我可以看到state.routing.routingLoaded的状态值为true,但在修改doStuff部分后,它还没有执行useEffect。

为重新发送程序添加这样的比较函数不起作用:

const state = useTypedSelector(state => state,(()=>{return true}));

任何想法或提示都很棒:(

谢谢,Christian

编辑:

这就是我更新状态的方式:

let initialState: RoutingStateInterface = {
routingLoaded: false,
routes: {},
currentRouting: undefined,
};
const loadRouting = (
state: RoutingStateInterface,
action: RoutingActions.RoutingAction
) => {
switch (action.payload.name) {
case "LoadRoutingPayload":
const newState = Object.assign({}, state);
action.payload.body.map((item) => {
newState.routes[item.path] = item;
});
newState.routingLoaded = true;
return newState;
default:
return state;
}
};

我找到了解决方案:(

似乎对象内的更改没有得到正确的监视,所以我决定监视我需要的确切密钥

const routingLoaded = useTypedSelector(state => state.routing.routingLoaded);
useEffect(() =>{
if(routingLoaded)
{
//doStuff
}
},[routingLoaded])

现在它正在以应有的方式工作:(

相关内容

  • 没有找到相关文章