You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Redux:关联两个Slice时useSelector取值出现未定义错误

问题分析与解决

你遇到的undefined is not an object错误,核心原因是错误地将slice_2的reducer对象(而非状态值)赋值给了slice_1的initialState,同时Redux的slice状态是独立存储在store不同节点下的,不能直接在一个slice的初始化阶段引用另一个slice的reducer或状态。

错误点拆解

看你的代码:

import slice_2 from './slice_2';

export const slice_1 = createSlice({
  name: 'slice_1',
  initialState: {
    value: slice_2 // slice_2导出的是reducer函数,不是状态值
  },
});

slice_2文件里导出的是slice_2.reducer(一个函数),不是slice_2的状态对象。所以slice_1.initialState.value实际是一个函数,而非预期的数值,后续在组件中访问时自然会抛出类型错误。

正确的实现方式

根据你的需求,分三种场景处理:

场景1:组件需要同时展示两个slice的状态

不需要在slice层面关联,直接在组件中分别获取即可:

// 组件中
const slice1Value = useSelector(state => state.slice_1.value);
const slice2Value = useSelector(state => state.slice_2.value);

// 直接使用
<Text>{slice2Value}</Text>

场景2:slice_1的逻辑需要依赖slice_2的状态(比如reducer中更新时用到)

在slice_1的reducers或extraReducers中,通过rootState参数获取slice_2的状态:

// slice_1.js
import { createSlice } from '@reduxjs/toolkit';

export const slice_1 = createSlice({
  name: 'slice_1',
  initialState: {
    value: 0 // 先设置合理的初始值
  },
  reducers: {
    syncWithSlice2: (state, action, { getState }) => {
      // 获取整个store的状态,进而拿到slice_2的value
      const rootState = getState();
      state.value = rootState.slice_2.value;
    }
  }
});

export const { syncWithSlice2 } = slice_1.actions;
export default slice_1.reducer;

之后在组件中调用dispatch(syncWithSlice2())即可同步slice_2的状态到slice_1。

场景3:slice_1的初始状态需要复用slice_2的初始值

单独导出slice_2的initialState,然后在slice_1中导入使用:

// slice_2.js
import { createSlice } from '@reduxjs/toolkit';

// 单独导出初始状态
export const slice2InitialState = {
  value: 0
};

export const slice_2 = createSlice({
  name: 'slice_2',
  initialState: slice2InitialState,
});

export default slice_2.reducer;
// slice_1.js
import { createSlice } from '@reduxjs/toolkit';
import { slice2InitialState } from './slice_2';

export const slice_1 = createSlice({
  name: 'slice_1',
  initialState: {
    value: slice2InitialState.value // 复用slice_2的初始值
  },
});

export default slice_1.reducer;

内容的提问来源于stack exchange,提问作者Daniel Mohebi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:05:23