Reactjs 如何在redux中设置初始状态
我想知道如何在redux中设置存储的初始状态。我举个例子。我试图修改代码,使TODO具有初始化的值Reactjs 如何在redux中设置初始状态,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我想知道如何在redux中设置存储的初始状态。我举个例子。我试图修改代码,使TODO具有初始化的值 const todoApp=组合减速机({ 待办事项, 可视性过滤器 }, { todos:[{id:123,文本:'hello',已完成:false}] }) 在文件之后: 但是它不起作用,我也不太清楚为什么。它需要成为createStore的第二个参数: const rootReducer=combinereducer({ 待办事项:待办事项, visibilityFilter:visibi
const todoApp=组合减速机({
待办事项,
可视性过滤器
}, {
todos:[{id:123,文本:'hello',已完成:false}]
})
在文件之后:
但是它不起作用,我也不太清楚为什么。它需要成为
createStore
的第二个参数:
const rootReducer=combinereducer({
待办事项:待办事项,
visibilityFilter:visibilityFilter
});
常量initialState={
todos:[{id:123,文本:'hello',已完成:false}]
};
const store=createStore(
减根剂,
初始状态
);
您可以在减速器中设置初始状态
根据@ctrlplusb的回答,这种方法之所以有效,是因为
const rootReducer = combineReducers({
todos: todos,
visibilityFilter: visibilityFilter
});
第一个todos
是一个键,它将第二个todos
设置为减速器的返回值。还原程序总是在创建存储时运行一次。这将初始化您的全局存储
在创建存储时会调度一个操作。这就是如何在存储中初始化每个组合减速器中提供的初始状态。如果检查redux开发工具,您将看到调度的第一个操作是“@@redux/INIT{something}”
在redux的文档中,在文件末尾附近有一个分派({type:ActionTypes.INIT})
看这里
请参阅我在stackoverflow上提出的问题/答案,以澄清回答:
到目前为止,已经有了很好的答案,但让我来冰蛋糕吧;也许是为了给你一个深入的分析,这样你就不会只是复制StackOverflow代码,而不知道你的程序为什么会工作 实现这一目标的主要方法有两种,即: 1.使用createStore方法。它接受可选的第二个参数(PrepreedState值) 如果调用
createStore
而不调用preload状态
,则会将状态初始化为{}
因此,减速器将接收未定义的
作为其状态值。
这就引出了第二种方法
减速器
处进行设置<通过查看传入的状态参数(如果createStore
未使用initialState
调用createStore
,则该参数将是未定义的),并返回希望用作默认值的值,code>还原程序也可以设置initialState
initialState
“应用程序范围”传递。方法2将带来大量的重复,因为您必须在所有的还原器中执行相同的操作。这是主要的缺点。但是,当您只想将initialState设置为{}
时,它非常流行,这是一种常见的模式
这里有一个4分钟的阅读,以便更好地理解:有什么理由更喜欢@ctrlplusb而不是这一个吗?实际上,jmancherje是redux建议的:是的,你肯定应该定义还原剂的默认状态,我只是认为OP正在寻找一个与全存储再水化(例如SSR/localstorage)相关的解决方案。github链接已断开。您可能应该链接到实际提交,而不是某个分支,因为这些分支可以更新。如果我没有在reducer中指定默认状态值并向
createStore
提供初始状态,则状态设置不正确。
const rootReducer = combineReducers({
todos: todos,
visibilityFilter: visibilityFilter
});
const store = createStore(counter) // createStore without preloadedState
const initialState = {} // or in your case:
const initialState = {
initialTodos = [{id:123, text:'hello', completed: false}]
}
const store = createStore(counter, initialState) // create store with preloadedState
const initialState = {} // a common pattern but in your case:
const initialState = {
initialTodos = [{id:123, text:'hello', completed: false}]
}
function todoReducer(state = initialState, action) {
switch (action.type) {
case // your type:
return ...
default:
return state
}
}