React-Redux:getState() 不可用
Posted
技术标签:
【中文标题】React-Redux:getState() 不可用【英文标题】:React-Redux: getState() not available 【发布时间】:2021-12-10 18:22:36 【问题描述】:我在使用 redux 和 getState()
时遇到了这个非常令人沮丧的问题。我有这个异步重击:
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 迁移,因此采取了行动。
【问题讨论】:
请提供mvce。你是如何设置 redux 商店的?并且动作创建者是getUser
,您正在调度getCurrentUser
。您的代码无法运行,因此无能为力。创建 mvce 后,尝试缩小问题范围
这可能是因为 js 代码被优化以从范围中删除未使用的变量,请尝试在 getUser
某处使用 getState
。
不敢相信...谢谢@HMR。
【参考方案1】:
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));
;
【讨论】:
以上是关于React-Redux:getState() 不可用的主要内容,如果未能解决你的问题,请参考以下文章
带有 Typescript 和 react-redux 的有状态组件:“typeof MyClass”类型的参数不可分配给 Component 类型的参数
react-redux——使用redux——使用react-redux这个扩展