正在提取状态以进行Redux



所以我的问题是,为什么第一个版本的代码不起作用,而另一个版本起作用?

只是删除关键元素而不是保持

(我是这些方面的新手,所以如果这是一个愚蠢的问题,请温柔:(

版本1(不起作用(

const ADD = 'ADD';
const addMessage = (message) => {
return {type: ADD, text: message};
}
function messageReducer(state = [], action) {
if(action.type == ADD){
return [...state, action.text];
}
else{
return state;
}
}
const store = Redux.createStore(messageReducer);

版本2(作品(

const ADD = 'ADD';
const addMessage = (message) => {
return {type: ADD, message};
}
function messageReducer(state = [], action) {
if(action.type == ADD){
return [...state, action.message];
}
else{
return state;
}
}
const store = Redux.createStore(messageReducer);

上面的两个例子都应该有效,因为它们都是有效的。唯一的区别是,第一个例子中的消息被绑定在一个名为text的任意参数中,但它仍然是使用action.text正确提取的

您可以在这里找到一个工作示例:https://codesandbox.io/s/reactredux-forked-ksz3b?file=/reducer.js

我会尽力解决这个问题,我已经有一段时间没有和Redux合作了。

最初,我会用case/break来写你的条件语句(对我来说更清楚,但这是一种偏好(。看起来您正试图将数组实现为";状态";在reducer中,利用向现有池中添加信息的能力。

要用switch语句和对象状态变量声明重写代码,如下所示:

const ADD = 'ADD';
const addMessage = (message) => {
return { type: ADD, text: message };
}
function messageReducer(state = {}, action) {
switch(action.type) {
case ADD:
return ...state, action.text;
default:
return state;
}
}
const store = Redux.createStore(messageReducer);

然后,我将通过用数组构建一个初始状态,并销毁该键来向中添加值来实现这一点。所以这可能是这样的:

const initialState = { msgArr: ['hello world'] }
const ADD = 'ADD';
const addMessage = (message) => {
return { type: ADD, text: message };
}
function messageReducer(state = initialState, action) {
switch(action.type) {
case ADD:
return ...state, [...state.msgArr, action.text];
default:
return state;
}
}

我在链接我的工作代码笔示例时遇到了一些问题,所以请随意测试一下,看看这是否有效。希望我没有答对你的问题。祝你好运!

相关内容

  • 没有找到相关文章

最新更新