化简器中(初始)状态的编辑属性

时间:2019-02-09 12:27:57

标签: reactjs redux

我想更改化简器中位于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并具有相同的数组顺序

1 个答案:

答案 0 :(得分:0)

作为一般经验法则,您不希望在减速器中执行此操作,因为它应该是纯粹的,但是要实现所需的功能,您可以执行以下操作:

const newState = state.features.reduce((acc, feature) => {
    if(action.feature.id !== feature.id){
        feature.visible = !feature.visible;
    }
    return [ ...acc, feature ];
}, [])

这将保持顺序,更改值,克隆状态并避免您正在执行的其他循环。