【发布时间】:2021-02-19 06:25:38
【问题描述】:
我正在使用 redux,每次调用调度时都会调用我的 reducer 函数,但状态没有更新。而且第一个状态和下一个状态没有区别。
ArtclesReducer.ts
const defaultState: Articles = {
articles: [{token: "teken", title: "text", featureImageUrl: ""}],
}
export const articlesReducer: Reducer<Articles, any> = (state = defaultState, action: ArticlesActionTypes) => {
let nextState: Articles = {
articles: state.articles,
}
switch (action.type) {
case ADD_ARTICLES :
let allArticles = [...state.articles, ...action.payload]
return {
articles: [{title: "", token: "", featureImageUrl: ""}, {
title: "",
token: "",
featureImageUrl: ""
}, {title: "", token: "", featureImageUrl: ""}, {title: "", token: "", featureImageUrl: ""}]
}
case UPDATE_ARTICLE:
console.log("in update article")
for (let i = 0; i < nextState.articles.length; i++) {
if (nextState.articles[i].token == action.payload.token) {
nextState.articles[i] = action.payload;
break;
}
}
break;
case DELETE_ARTICLE:
console.log("in delete article")
nextState.articles = nextState.articles.filter(value => {
return value.token != action.payload;
})
break;
default:
}
return nextState;
}
如图所示,我返回一个非空状态。
当您看到状态时,它变得相同而不是更新
【问题讨论】:
-
在 ADD_ARTICLES 中,您返回相同的静态对象,在 UPDATE_ARTICLE 中,您正在变异,here 是您应该这样做的方式。
-
你是对的,但我将添加文章案例返回到 {...state,articles : [...state.articles,...action.payload]} 但注意到发生了
标签: reactjs redux state dispatch