Javascript 在使用spread操作符时,如何防止重复出现在Redux上?
我正在这样做: 案例加载页面: 返回{ 状态 页面:[…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{ 手提行李; } }, [];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
有什么想法吗?你可以这样做: 检查您的状态中是否存在现有页面,如果返回相同的页面,则单击“推送”
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,是的,你可以这么说。