繁体   English   中英

Redux 工具包使用选择器 state 不更新,即使调用了操作

Redux Toolkit useSelector state not updating even though action is called

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我一直在努力反对这一点,希望能得到另一双眼睛会有所帮助。

我在 React Native 应用程序中使用 Redux + Redux Toolkit,方式非常简单。 我可以告诉(通过日志语句)我的操作正在被调用并且 state 正在设置,但我在 state 上的 useSelector 永远不会更新。 我也尝试过使用shallowEqual ,但这不应该是必需的,因为 Redux 工具包使用 Immer 并且 object 不应该在更新后通过相等性检查(我研究的大多数其他类似问题都是由于这个原因)

这是我的主要部分,然后是所有相关代码。 请原谅代码转储,但我想给出一个完整的图片:


export interface Metadata {
    title: string
    author: string
    firstLines: string
    id: string
}

type MetadataState = Record<string, Metadata>

export const metadataSlice = createSlice({
    name: "metadata",
    initialState: {} as MetadataState,
    reducers: {
        setMetadata: (state: MetadataState, action: PayloadAction<MetadataState>) => {
            state = action.payload
            console.log("new metadata: ", state)
        },
        addMetadata: (state: MetadataState, action: PayloadAction<Metadata>) => {
            state[action.payload.id] = action.payload
        }
    }
});

我有一个异步操作来从 AsyncStorage 加载元数据(如移动设备上的 LocalStorage),如下所示:

export function loadMetadata() {
    return async (dispatch: AppDispatch, getState: () => RootState) => {
        const maybeMetadata = await AsyncStorage.getItem("metadata");
        if(maybeMetadata) {
            dispatch(metadataSlice.actions.setMetadata(JSON.parse(maybeMetadata)))
            return true
        } else {
            return false
        }
    }
}

我将其发送到我的主要组件中,如下所示:

  const dispatch = useAppDispatch()

  useEffect(() => {
    dispatch(loadMetadata())
  }, [])

在另一个组件中,我试图通过以下方式访问 state:

const metadata = useAppSelector(state => state.metadata)

知道发生了什么吗? state 似乎永远不会更新,即使我看到我的操作被调用并更新其中的 state。 是不是没有正确发送? 我尝试使用store.getState()直接访问 state 并且 state 似乎是空的,是不是只是没有设置?

老实说,我很迷茫,感谢任何帮助。

问题暂未有回复.您可以查看右边的相关问题.
1 即使调用了 reducer,Redux 状态也不会更新

我正在构建一个餐厅类型的应用程序。 我正在使用 redux 来处理状态。 我在顶角有一个图标,用于跟踪购物车中的商品数量。 当状态包含一个数组时,这有效并被正确更新。 从那以后,我出于个人原因将状态更改为地图,并且一切正常,除了数字不再更新。 我可以看到减速器仍在工作,但是数字没有像以前那样更新。 ...

2 useSelector 未使用 Redux 工具包更新

我整天都在与这个作斗争,我会很感激任何帮助。 我有一个使用 Redux 工具包和 createSlice 构建的 redux 商店,看起来像这样: 我还有一个根减速器,它导入切片的 rest 并将它们命名为 当我将测试添加到测试数组时,它工作正常并显示在 redux 开发工具中。 问题来了,reac ...

5 useSelector 在分派动作 React Redux 后不更新

我知道已经有几个与此类似的问题,但所提供的解决方案都不适用于我。 我正在我的 React Native 组件中调度一个动作,但是当我之后尝试使用 useSelector 访问状态时,它仍然只是之前的状态,而不是更新的状态。 我的组件: const userSettings = useSelecto ...

6 为什么用过时的 state 调用 useSelector - React Redux

我有一个组件,它绘制从我的 redux 商店获取的序列: 每当“序列”更新时,都会触发我执行 canvas 绘制的 useEffect 调用: 但由于某种原因,useSelector 填充的“序列”位于我的商店 state 后面。 如果我绘制序列而不是商店 state 它会绘制正确的 state: ...

9 Redux 工具包使用选择器防止渲染

我有一个反应原生应用程序,它使用日期选择器并显示一个饼图,该饼图根据所选日期而变化。 每当我更改日期时,我都会过滤掉饼图要显示的会话,然后从 useSelector 获取这些会话。 所以它看起来像这样: 然后我将它们显示在我的图表上: 每次我更改日期时,它似乎都会重新渲染多次,例如 10 次,或者如 ...

10 Redux 操作需要在更新 state 之前调用两次?

我正在调用 redux 操作,该操作向数据库发出获取请求并返回包含正确数据的 object。 我已经通过系统跟踪 object,显示它一直正确发送到反应组件,但是,当调用 redux 操作时,object 没有得到更新。 如果进行第二次调用,则更新 state。 我认为这与异步行为有关,但我不确定 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM