Javascript 如何在redux中的还原程序之间共享状态(如何组织redux)?
我学习了react with redux,但不明白如何在reducer中使用状态属性 我已经在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
/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都有足够的信息来更新自己的状态片
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
访问全局状态很容易。签出中的函数