我想更改化简器中位于initialState中的数组元素。
我已经读到我应该使用Object.assign(),然后才可以更改整个数组。
const initState = {
features: [
{id:1, title: 'Information is aviable everywhere', visible:true, status:2, next:2, points: 0},
{id:2, title: 'Information is aviable everywhere v2', visible:false, status:2, next:3, points: 0},
...
这是我目前的操作方法,但是,它更改了数组顺序...因此以不同的顺序显示:
case 'TEST_FEATURE':
let newFeatures = state.features.filter(feature => {
return action.feature.id !== feature.id && action.feature.next !== feature.id
})
let nexFeature = state.features.find(feature => {
return feature.id === action.feature.next})
nexFeature.visible = true
newFeatures.unshift(nexFeature)
return {
...state,
features: newFeatures
}
我想更改功能ID 2(仅属性)visibile = true并具有相同的数组顺序
答案 0 :(得分:0)
作为一般经验法则,您不希望在减速器中执行此操作,因为它应该是纯粹的,但是要实现所需的功能,您可以执行以下操作:
const newState = state.features.reduce((acc, feature) => {
if(action.feature.id !== feature.id){
feature.visible = !feature.visible;
}
return [ ...acc, feature ];
}, [])
这将保持顺序,更改值,克隆状态并避免您正在执行的其他循环。