Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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
Javascript 在使用spread操作符时,如何防止重复出现在Redux上?_Javascript_Reactjs_Ecmascript 6_Redux_React Redux - Fatal编程技术网

Javascript 在使用spread操作符时,如何防止重复出现在Redux上?

Javascript 在使用spread操作符时,如何防止重复出现在Redux上?,javascript,reactjs,ecmascript-6,redux,react-redux,Javascript,Reactjs,Ecmascript 6,Redux,React Redux,我正在这样做: 案例加载页面: 返回{ 状态 页面:[…state.pages,action.pages], }; 我有一个组件,每次我输入它时,它都会将相同的数据发送到存储,所以我会得到大量重复数据 页面数组如下所示: 页码:[ { 关键字:0, 梅努梅:“家”, 页面类型:“主页”, 数据索引:“主页0” }, { 重点:1,, Menuame:“雇主聊天”, 页面类型:“EmployeerChat”, 数据索引:“EmployeerChat1” }, ] 这是反应组件: const han

我正在这样做:

案例加载页面: 返回{ 状态 页面:[…state.pages,action.pages], }; 我有一个组件,每次我输入它时,它都会将相同的数据发送到存储,所以我会得到大量重复数据

页面数组如下所示:

页码:[ { 关键字:0, 梅努梅:“家”, 页面类型:“主页”, 数据索引:“主页0” }, { 重点:1,, Menuame:“雇主聊天”, 页面类型:“EmployeerChat”, 数据索引:“EmployeerChat1” }, ] 这是反应组件:

const handlePageLoad==>{ 如果siteById.data{ siteById.data.pages.mapp,索引=>{ 返回加载页面操作{ 关键词:索引,, Menuame:p.Menuame, pageType:p.pageType, dataIndex:p.pageType+索引, }; }; } }; useEffect=>{ 如果siteById.data.pages.length{ 手提行李; } }, [];
有什么想法吗?

你可以这样做:

检查您的状态中是否存在现有页面,如果返回相同的页面,则单击“推送”

case LOAD_PAGES:
        return {
            ...state,
            pages: state.pages.findIndex(page => page.key === action.pages.key) >= 0 ?
                    state.pages :
                    [...state.pages, action.pages]
        };

您可以这样做:

检查您的状态中是否存在现有页面,如果返回相同的页面,则单击“推送”

case LOAD_PAGES:
        return {
            ...state,
            pages: state.pages.findIndex(page => page.key === action.pages.key) >= 0 ?
                    state.pages :
                    [...state.pages, action.pages]
        };

有很多方法可以解决您的问题,以下是我将如何解决的方法:


不要使用数组,而是将页面存储在对象中,并使用已定义的键作为对象的键。您可以使用Object.valuesstore.pages或Object.entriesstore.pages以以前的方式获取页面数组。

有许多方法可以解决您的问题,下面是我的解决方法:


不要使用数组,而是将页面存储在对象中,并使用已定义的键作为对象的键。您可以使用Object.valuesstore.pages或Object.entriesstore.pages像以前一样获取页面数组。

以下是筛选重复页面的智能方法

函数筛选器副本数组,等于{ return array.filteritem,位置=>{ return array.findIndexother=>areEqualitem,other==pos; }; } console.log 过滤器副本[ {键:1,名称:'test'}, {key:2,name:'apple'}, {键:1,名称:'test'}, ],a,b=>a.key==b.key
; 这里有一个过滤重复项的聪明方法

函数筛选器副本数组,等于{ return array.filteritem,位置=>{ return array.findIndexother=>areEqualitem,other==pos; }; } console.log 过滤器副本[ {键:1,名称:'test'}, {key:2,name:'apple'}, {键:1,名称:'test'}, ],a,b=>a.key==b.key
; 只要使用set,就可以省略重复的元素

return { ...state, arr: Array.from(new Set([...state.arr, ...newArr]))};

只要使用set,就可以省略重复的元素

return { ...state, arr: Array.from(new Set([...state.arr, ...newArr]))};

为什么要为所有页面分派loadPagesAction?你的目标是什么purpose@ShubhamKhatri我必须根据这些页面呈现菜单列表。因此,如果我理解正确,每个组件都是一个页面,当页面加载时,谁希望在redux中更新状态以便您更改菜单?看起来您正在返回状态。页面两次:第一次…状态,页面:[2…state.pages为什么要为所有页面分配loadPagesAction?您的任务是什么purpose@ShubhamKhatri我必须根据这些页面呈现菜单列表。因此,如果我理解正确,每个组件都是一个页面,当页面加载时,谁希望在redux中更新状态以便您更改菜单?看起来您正在返回状态。页面两次:1st、 …说明,第页:[2nd…state.pages除了使用findIndex,您还可以使用内置的数组函数。@NikitaMalyschkin,findIndex方法返回数组中满足提供的测试函数的第一个元素的索引,因此没有额外的循环,我们可以保留它is@VivelDoshi,some方法也是如此。findIndex在是的,但有些只是完成这项工作的合适工具。@NikitaMalyschkin,是的,你可以这么说。你可以不用findIndex,而使用内置数组函数some。@NikitaMalyschkin,findIndex方法返回数组中满足所提供测试函数的第一个元素的索引,因此没有额外的循环,我们可以保留它因为它is@VivelDoshi,some方法也是如此。findIndex在任何方面都没有错,但有些恰恰是完成这项工作的合适工具。@NikitaMalyschkin,是的,你可以这么说。