Javascript 反应用户educer don';t在React上下文中更新状态

Javascript 反应用户educer don';t在React上下文中更新状态,javascript,reactjs,react-hooks,react-context,use-reducer,Javascript,Reactjs,React Hooks,React Context,Use Reducer,React useReducer不更新React上下文中的状态。但在返回部分,状态数据正确呈现。以下是示例: context.js const globalContext=React.createContext(); 常量初始状态={ 状态:空, }; const globalReducer=(状态、操作)=>{ 开关(动作类型){ 案例“设置状态”: 返回{…状态,状态:action.payload}; 违约: 返回状态; } }; 导出常量GlobalState=({children})=>

React useReducer不更新React上下文中的状态。但在返回部分,状态数据正确呈现。以下是示例:

context.js

const globalContext=React.createContext();
常量初始状态={
状态:空,
};
const globalReducer=(状态、操作)=>{
开关(动作类型){
案例“设置状态”:
返回{…状态,状态:action.payload};
违约:
返回状态;
}
};
导出常量GlobalState=({children})=>{
const[state,dispatch]=React.useReducer(globalReducer,initialState);
返回{children};
};
导出常量useGlobalState=()=>{
const context=React.useContext(globalContext);
返回上下文;
};
comeChild.js

const{state,dispatch}=useGlobalState();
常量testFn=()=>{
console.log(state);//->{statuses:null}:问题出在这里
};
React.useffect(()=>{
console.log(state);//->{statuses:null}:按预期
分派({type:'SET_STATUSES',payload:'test str'});
console.log(state);//->{statuses:null}:问题出在这里
testFn();
设置超时(()=>{
console.log(state);//->{statuses:null}:问题出在这里
}, 3000);
}, []);
返回
{state.statuses&&{state.statuses}}/->'teststr'
;

有什么问题吗?

我对上下文和用户都很陌生,但我猜React中的“逻辑”很好。React update状态为异步和非同步,这可能导致这些行为

您的reducer和context显然是有效的,因为它在return语句中输出正确的状态。这是因为您的
state.statuses&&
条件指示您希望在state.statuses“存在”时返回div

所以对我来说这看起来并没有什么问题,只是对状态更新的反应

您可以
console.log(action.payload)
在减速器中查看“test str”何时进入减速器操作。

console.log(action.payload)返回“test str”。Return语句在setTimeout之前执行。如果我设置20000个持续时间-结果相同。