reactjs - 使用 react-redux / redux-watch 在 React 应用程序中访问状态时出现问题
问题描述
我试图在触发 Redux-watch store.subscribe() 时访问我的商店的 state.X(通过更新 state.Y),但我只能访问初始状态值。我正在使用 Redux-toolkit、React-redux、React-watch
当我按下 UI 按钮后调用“打印”函数时,我的状态会显示为所需的值,但是当我在 Redux-watch subscribe() 函数中调用“打印”函数时,state.X 有它的初始值。知道有什么问题吗?
从商店获取状态。
const date = useSelector((state) => state.calendar);
打印功能:const print = () =>{console.log(date);}
Redux-watch 订阅功能:
let wData = watch(store.getState, 'calendar.monthData');
const unsubscribeWData = store.subscribe(wData((newVal, oldVal, objectPath) =>
{
if(newVal !== oldVal)
{
console.log(newVal); //array with new values
print(); //state has initial values
}
}));
Redux-toolkit 切片:
const calendarSlice = createSlice({
name: "calendar",
initialState: {
date: "", //state.X
monthData: [], //state.Y
},
reducers: {
currentDateAction: (state,action) =>
{
const { newDate} = action.payload;
state.date = newDate;
}
},
extraReducers: builder => {
builder.addCase(fetchCalendarMonthSum.fulfilled, (state, action) => {
state.monthData = action.payload;
})
}
});
export const {currentDateAction} = calendarSlice.actions;
export default calendarSlice.reducer;
解决方案
最后,我设法通过直接调用 store.getState() 在 subscribe() 函数中获取了 store 的状态。
虽然我没有弄清楚为什么变量“日期”在 subscribe() 方法执行时设置为初始状态值,但我猜这是在调用 subscribe() 函数时更新状态的原因。所以要在 subscribe() 方法中获取状态:
let wData = watch(store.getState, 'calendar.monthData');
const unsubscribeWData = store.subscribe(wData((newVal, oldVal, objectPath) =>
{
if(newVal !== oldVal)
{
console.log(store.getState().calendar.date)
}
}));
推荐阅读
- css - 我需要帮助用 css 在同一个地方覆盖不同的视频
- css - Vue+ laravel 模态窗口大小对屏幕大小的适配
- c - scanf("%s", &str) 和 scanf("%s\n", &str) 有什么区别?
- r - In R, how to apply a function on each dataframe row that uses a column value?
- c# - 如何使用 MySqlDataReader 计算数据库的行数?
- entity-framework - 实体框架中的流利 API 用于连接 2 个表
- assembly - 我希望程序继续运行,直到用户输入 0 然后程序终止
- javascript - ReactJS & i18n.js:带链接的翻译
- python - 在 Python 中构建一个返回活动主机列表的 IP sacanner。只返回一台主机
- json - 如何与 EL 表达式中的 net.sf.json.JSONObject.NULL 常量进行比较