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() 不可用的主要内容,如果未能解决你的问题,请参考以下文章

redux ,react-redux梳理,以及源码的学习

react-redux中的重要API解析

带有 Typescript 和 react-redux 的有状态组件:“typeof MyClass”类型的参数不可分配给 Component 类型的参数

react-redux——使用redux——使用react-redux这个扩展

android SwitchButton 和CheckBox 怎样设置不可点击?

React-Native 之 redux 与 react-redux