Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用react redux的多复选框搜索筛选器_Reactjs_Redux - Fatal编程技术网

Reactjs 使用react redux的多复选框搜索筛选器

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

我想在我的react redux应用程序中创建多个复选框搜索筛选器

我添加了复选框,它将向api发出请求,但问题是,每次我单击复选框时,新数据都来自api,这将覆盖状态中的旧数据

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],我会得到空数组。它不应该是。。。