Reactjs React上下文API不更新PubSub中订阅函数中使用的状态

Reactjs React上下文API不更新PubSub中订阅函数中使用的状态,reactjs,publish-subscribe,react-context,Reactjs,Publish Subscribe,React Context,我正在使用React上下文API和PubSub模式。我的代码中有两个主要的事件订阅函数 订阅EventB及其逻辑的Subscription1需要来自上下文提供程序的状态 Subscription2订阅在EventB之前运行的EventA,并使用上下文API更新状态 我的问题是,如果上下文API已运行以更新其状态,则Subscription1中的变量具有来自provider事件的旧状态 我已经尝试了许多解决方案(将订阅函数放在useCallback中,并根据上下文状态来确定);然而,有趣的

我正在使用React上下文API和PubSub模式。我的代码中有两个主要的事件订阅函数

  • 订阅EventB及其逻辑的Subscription1需要来自上下文提供程序的状态

  • Subscription2订阅在EventB之前运行的EventA,并使用上下文API更新状态

我的问题是,如果上下文API已运行以更新其状态,则Subscription1中的变量具有来自provider事件的旧状态

我已经尝试了许多解决方案(将订阅函数放在
useCallback
中,并根据上下文状态来确定);然而,有趣的是,如果我使用
setTimeOut
将EventB延迟一小段时间,则上下文状态将更新,并且我的函数具有最新状态

下面是上下文提供程序和包含pubSub的react组件的示例代码

感谢您的帮助

myFunction.jsx

const默认\u状态={
variableA:null,
variableB:null,
};
export const myContext=createContext(默认状态);
导出函数myProvider({children}){
常量myReducer=(状态、操作)=>{
开关(动作类型){
案例“设置变量”:{
const{variableA,variableB}=action.payload;
返回{
……国家,
…{variableA,variableB},
};
}
违约:
返回动作。有效载荷;
}
};
const[myState,dispatch]=useReducer(
myReducer,
默认状态
);
const setVariable=useCallback(
({variableA,variableB})=>
派遣({
类型:“设置变量”,
有效载荷:{
变化无常,
可变的,
},
}),
[快讯]
);
返回(
{儿童}
);
}
export const useMyFunction=()=>useContext(myContext);
App.jsx


从“myFunction”导入{useMyFunction};
功能myComponent(道具){
const[state,api]=useMyFunction();
常数{
变化无常,
可变的
}=国家;
useffect(()=>{
const{unsubscribe}=myService2.subscribe(
myService2.EVENTS.EventB,
eventData=>{
//用变量A和变量B做一些事情
//当此订阅被称为两个变量时
//仍处于空状态
}
);
return()=>{
取消订阅();
};
},[variableA,variableB]);
useffect(()=>{
const{unsubscribe}=myService1.subscribe(
myService1.EVENTS.EventA,
({variableA,variableB})=>{
setVariable({variableA,variableB});
}
);
return()=>{
取消订阅();
};
}[api];
返回(
/** ... **/
);
}