如何使用redux-toolkit访问redux中另一个切片的状态?

50pmv0ei  于 2022-11-24  发布在  其他
关注(0)|答案(3)|浏览(262)

在我的Redux存储中,我有多个切片,我想访问speciesSlice中settingsSlice的lang状态。
下面是我的切片的代码示例:

const settingsSlice = createSlice({
  name: 'settings',
  initialState: { lang: 'en', theme: 'dark' },
  reducers: {
    ...
  },
});

const speciesSlice = createSlice({
  name: 'species',
  initialState: data[`vds-list-${HERE I WANT TO USE THE "lang" STATE OF THE SETTINGSSLICE}`],
  reducers: {
    ...
  },
});

到目前为止,我还没有找到一个解决办法,所以也许这只是不可能的?
我可以只使用一个切片来存储其中的所有状态,但我更希望将状态的不同部分分离到不同的切片中。

cigdeys3

cigdeys31#

根据定义,归约器只能访问它们所拥有的状态片段,所以,如果我有{users: usersReducer, posts: postsReducer}usersReducer根本不能访问posts状态片。
有关详细信息,请参见Redux常见问题解答条目“如何在Reducer之间共享状态?”。

vulvrdjw

vulvrdjw2#

我通过简单地导入redux存储对象并调用getState()方法来实现这一点。
所以在speciesSlice reducer动作中你可以这样做:

const speciesSlice = createSlice({
  name: 'species',
  initialState: data[`vds-list-${HERE I WANT TO USE THE "lang" STATE OF THE SETTINGSSLICE}`],
  reducers: {
    ...
    setLang: (state, _) => {
      const reduxStore = store.getState();
      const lang = reduxStore.settingsSlice.lang;
      state = data[`vds-list-${lang}`];
    },
    ...
  },
});
axzmvihb

axzmvihb3#

如Redux常见问题解答条目“如何在两个reducer之间共享状态?"中所述,您可以使用redux-thunk来编写可以访问整个状态的reducer。

const speciesSlice = createSlice({
  name: 'species',
  initialState: data[`vds-list-${HERE I WANT TO USE THE "lang" STATE OF THE SETTINGSSLICE}`],
  reducers: {
    ...
    internalSetLang: (state, action) => {
      state = data[`vds-list-${action.payload}`];
    },
    ...
  },
});

const { internalSetLang } = speciesSlice.actions;

export function setLang() {
  return (dispatch, getState) => {
    const lang = getState().settings.lang;
    dispatch(internalSetLang(lang));
  };
}

这类似于@Biskrem Muhammad的answer,但避免了使用Redux存储作为全局变量。

相关问题