Javascript 如何在redux中的还原程序之间共享状态(如何组织redux)?

Javascript 如何在redux中的还原程序之间共享状态(如何组织redux)?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我学习了react with redux,但不明白如何在reducer中使用状态属性 我已经在/reducers文件夹中创建了reducers文件 import {textReducer, addCustomMinusWordReducer} from "./text" import {combineReducers} from "redux" const allReducers = combineReducers({ text: textReducer, customMinu

我学习了react with redux,但不明白如何在reducer中使用状态属性 我已经在
/reducers
文件夹中创建了reducers文件

import {textReducer, addCustomMinusWordReducer} from "./text"
import {combineReducers} from "redux"

const allReducers = combineReducers({
    text: textReducer,
    customMinusWords: addCustomMinusWordReducer
})

export default allReducers
reducerText.js

export const textReducer = (state = [], action) => {
 switch (action.type) {
     case 'ADD_TEXT':
         return state = action.payload;
     default:
         return state;
 }
}
export const addCustomMinusWordReducer = (state = [], action) => {
 switch (action.type) {
     case 'ADD_CUSTOM_MINUS_WORD':
         return state = action.payload;
     default:
         return state;
 }
}
我在
/reducers
文件夹中创建index.js

import {textReducer, addCustomMinusWordReducer} from "./text"
import {combineReducers} from "redux"

const allReducers = combineReducers({
    text: textReducer,
    customMinusWords: addCustomMinusWordReducer
})

export default allReducers
我的问题是我无法访问在
textReducer
内部
addCustomMinusWordReducer
中创建的
text
状态。 我找到了相关的,但这不是我要找的。 如何在减速机中使用状态?
谢谢

来自redux的官方文档

许多用户后来想尝试在两个还原器之间共享数据,但发现合并还原器不允许他们这样做。可以使用以下几种方法:

  • 如果一个reducer需要知道来自另一个状态片的数据,则可能需要重新组织状态树形状,以便单个reducer处理更多的数据

  • 您可能需要编写一些自定义函数来处理这些操作。这可能需要用您自己的顶级减速器功能更换组合减速器。您还可以使用诸如reduce reducer之类的实用程序来运行combinereducer来处理大多数操作,但也可以为跨状态切片的特定操作运行更专门的reducer

  • 异步操作创建者(如redux thunk)可以通过getState()访问整个状态。动作创建者可以从状态中检索附加数据并将其放入动作中,以便每个reducer都有足够的信息来更新自己的状态片

因此,通过准确地使用您的方法,而不使用redux thunk,也不使用父约简重新排序状态。您可以做的是从动作创建者处传递状态

比如,; 一个行动是:

 const ExampleComponent = ({ text, clicked }) => {
    return (
       <button onClick={() => clicked(text)} />
    );
 };

 export default connect(state => ({ 
   text: state.text 
 }, dispatch => ({
   clicked: (textState) => dispatch({ type: 'ADD_CUSTOM_MINUS_WORD', textState })
 })(ExampleComponent);
如果您真的想像文档中建议的那样在减速器中使用全局状态,那么简单的方法就是使用一个实用程序,例如。然后可以使用
还原还原器,而不是使用
组合还原器
。在reducer中,state对象将包含全局状态,而不是combineReducer提供的本地状态

附言:

正如前面的回答所建议的,更改减缩器内的状态是一个坏主意,这可能会导致应用程序中难以修复的错误


因此,与其使用
state=state.payload
,不如使用像
state={…state,…state.payload}这样的扩展运算符
它会将更改附加到状态,而不是直接设置状态。

也许您知道如何使用redux thunk访问存储?使用
redux thunk
访问全局状态很容易。签出中的函数