React-Redux:getState() 不可用
React-Redux: getState() not available
我在 redux 和 getState()
中遇到过这个非常令人沮丧的问题。我有这个异步 thunk:
export const getUser = () => async (dispatch, getState) => {
try {
dispatch(requestCurrentUser());
const user = await apiService.getUser();
console.log(user);
debugger;
} catch (e) {
dispatch(failureCurrentUser(e));
}
};
调试器按预期激活,但 getState()
未定义,仅 dispatch()
。奇怪的是,如果我单步执行调用堆栈并到达第一行 export const getUser = () => async (dispatch, getState) => {
,那里定义了 getState
但由于某种原因,当函数开始执行时,它变得不可用。
如果它有任何重要性 - 我在项目的根文件中调用 getUser()
,在 useEffect()
中,如下所示:
useEffect(() => {
store.dispatch(getCurrentUser());
}, []);
我必须通过 store
调用它,因为此根组件呈现 <Provider />
.
此外,我正在使用 redux-toolkit,现在逐渐从纯 redux 迁移,因此采取行动。
Devtools 将从范围中删除未使用的变量,当您 运行 控制台中的以下代码和调试器断点处尝试访问 value
时,您将收到 Uncaught ReferenceError: value is not defined
错误。
function test (value){
console.log('value is fine here:',value);
return function something(){
//here try to console log value in the console
debugger;
return 88
}
}
test(22)()
所以在你的代码中你可以只使用getState
并且它不会在优化后被删除:
export const getUser = () => async (dispatch, getState) => {
try {
//using getState here so it won't be removed from scope
console.log(getState);
dispatch(requestCurrentUser());
const user = await apiService.getUser();
console.log(user);
debugger;
} catch (e) {
dispatch(failureCurrentUser(e));
}
};
我在 redux 和 getState()
中遇到过这个非常令人沮丧的问题。我有这个异步 thunk:
export const getUser = () => async (dispatch, getState) => {
try {
dispatch(requestCurrentUser());
const user = await apiService.getUser();
console.log(user);
debugger;
} catch (e) {
dispatch(failureCurrentUser(e));
}
};
调试器按预期激活,但 getState()
未定义,仅 dispatch()
。奇怪的是,如果我单步执行调用堆栈并到达第一行 export const getUser = () => async (dispatch, getState) => {
,那里定义了 getState
但由于某种原因,当函数开始执行时,它变得不可用。
如果它有任何重要性 - 我在项目的根文件中调用 getUser()
,在 useEffect()
中,如下所示:
useEffect(() => {
store.dispatch(getCurrentUser());
}, []);
我必须通过 store
调用它,因为此根组件呈现 <Provider />
.
此外,我正在使用 redux-toolkit,现在逐渐从纯 redux 迁移,因此采取行动。
Devtools 将从范围中删除未使用的变量,当您 运行 控制台中的以下代码和调试器断点处尝试访问 value
时,您将收到 Uncaught ReferenceError: value is not defined
错误。
function test (value){
console.log('value is fine here:',value);
return function something(){
//here try to console log value in the console
debugger;
return 88
}
}
test(22)()
所以在你的代码中你可以只使用getState
并且它不会在优化后被删除:
export const getUser = () => async (dispatch, getState) => {
try {
//using getState here so it won't be removed from scope
console.log(getState);
dispatch(requestCurrentUser());
const user = await apiService.getUser();
console.log(user);
debugger;
} catch (e) {
dispatch(failureCurrentUser(e));
}
};