Reactjs 使用react redux的多复选框搜索筛选器
我想在我的react redux应用程序中创建多个复选框搜索筛选器 我添加了复选框,它将向api发出请求,但问题是,每次我单击复选框时,新数据都来自api,这将覆盖状态中的旧数据Reactjs 使用react redux的多复选框搜索筛选器,reactjs,redux,Reactjs,Redux,我想在我的react redux应用程序中创建多个复选框搜索筛选器 我添加了复选框,它将向api发出请求,但问题是,每次我单击复选框时,新数据都来自api,这将覆盖状态中的旧数据 export const dataReducer = (state= InitialState , action = null) => { switch(action.type) { case types.GET_DATA: let data = [...acti
export const dataReducer = (state= InitialState , action = null) =>
{
switch(action.type) {
case types.GET_DATA:
let data = [...action.payload.data]
// merge in the relevant items from state.data, e.g.
for (let item in state.data.filter(it => it.shouldBeKept)) {
data.push(item)
}
return Object.assign({}, state, { data });
default:
return state;
}
}
我怎样才能保持我原来的状态?还是有其他方法可以做到这一点
这是我的减速机
import * as types from '../constants';
const InitialState = { data: [], };
export const dataReducer = (state= InitialState , action = null) =>
{
switch(action.type) {
case types.GET_DATA:
return Object.assign({}, state, {data:action.payload.data });
default:
return state;
}
}
在这个问题中,如何在获取新数据的同时保留旧数据有点不清楚,但鉴于数据是一个数组,我假设您的意思是要合并它们
export const dataReducer = (state= InitialState , action = null) =>
{
switch(action.type) {
case types.GET_DATA:
return Object.assign({}, state, {data: [...state.data, ...action.payload.data] });
default:
return state;
}
}
这是假设您总是可以添加新数据。如果没有,在将数组分配给状态之前,您需要更加有选择性地选择哪些项合并到数组中
export const dataReducer = (state= InitialState , action = null) =>
{
switch(action.type) {
case types.GET_DATA:
let data = [...action.payload.data]
// merge in the relevant items from state.data, e.g.
for (let item in state.data.filter(it => it.shouldBeKept)) {
data.push(item)
}
return Object.assign({}, state, { data });
default:
return state;
}
}
显然,您将最清楚如何识别要保留或不保留的项目,修改逻辑以最适合您的需要。例如,从
let data=[…state.data]
开始,有选择地合并action.payload.data
中的项目,或者从空数组开始,从任意数组中进行拾取和选择,这对您来说可能是有意义的重要的一点是构造一个新数组,而不是在状态中向现有数组添加项。如果使用redux进行此操作,则应保留状态。无论如何,发布一些代码,这样人们可以帮助你。你的状态树是什么样子的?用状态树的结构示例更新您的问题。将*作为“../constants”中的类型导入;常量InitialState={data:[],};export const dataReducer=(state=InitialState,action=null)=>{switch(action.type){case types.GET_DATA:return Object.assign({},state,{DATA:action.payload.DATA});default:return state;}}这是我的reducer。你的问题仍然不清楚。在您认为问题所在的地方发布代码,或者在github上上载项目的最低版本。您能告诉我为什么数据会在状态中被覆盖吗?如果我这样做[…state.data,…action.payload.data],我会得到空数组。它不应该是。。。