我绝对是React-redux的初学者,我看了很多视频和文章,文档,却不明白状态如何在减速器之间以及存储到减速器之间流动。
我对每个减速器都有这样的状态
const initState = {todos:[]}
cont reducer =(state = initState,action)....
不同状态的异径管2
initState2 = {todo:“”}
reducer2 =(state = initState2,action)...
然后我导入并合并化简器。在这里,我使用的是状态不同的两个不同的reducer,这是正确的处理方式吗?如果是这样,如果每个化简器都有其自己的单独状态,那么如何将redux称为单一状态。
我们在存储中没有一个状态,所有还原器都可以访问该状态,并且调度操作直接更改存储状态,而不是更改还原器的存储。感谢您的帮助,这似乎是一个愚蠢的问题,但填补空白确实很重要,许多初学者与我有同样的疑问,请提供帮助。谢谢
答案 0 :(得分:1)
您只需要1个reducer即可存储待办事项。
如果每个reducer都有自己的redux,如何将其称为单一状态 个别状态。
该应用程序实际上只有一个全局存储,其中存储了所有应用程序状态。 reducer返回的是有效存储在商店中的内容。
存储的配置是一个映射(键-值),其中在根化简中定义了键,而值是从化简函数返回的值。
您必须查看的方式是视图为“哑”,因为它唯一要做的就是通过分派操作来告知应用程序所需的内容。这个动作只是一个事件,它标有一些字符串,您可以给它提供一个字符串,以清楚地标识视图所需的内容。减速器拦截此操作并相应地更新存储中的状态。反过来,您的应用程序中的所有组件都可以访问此状态。因此,这显然是全球性的。
在您的示例中,视图仅告诉应用程序:“添加待办事项”。减速器将拦截此消息,并返回具有添加的待办事项的数组。返回的数组将保存在商店中。
如果您想要单独的“待办事项”,则可能会引用当前的“活动”来执行。如此标记将使目的更具表现力。
这是单一状态,因为您的根减速器将以类似以下内容结束:
{
"activeTodo": activeTodoReducer
"todos": todosReducer
}
您可以在整个应用程序的组件中访问这些键/值。
答案 1 :(得分:1)
如果每个化简器都有其自己的独立状态,那么如何将redux称为单一状态。
因为状态未保存在减速器中。状态仅保存在存储中,并且只有一个存储。这就是为什么称为单一状态。
要创建商店,请执行以下操作:
const store = createStore(myBeautifulReducers)
在您的情况下,myBeautifulReducers将是:
const myBeautifulReducers = combineReducers({reducer, reducer2});
myBeautifulReducers将是一个既包含reducer(reducer和reducer2)又包含您在其中的每个逻辑(switch语句等)的对象。