редактирование свойства (начального) состояния в редукторе - PullRequest
0 голосов
/ 09 февраля 2019

Я хотел бы изменить элемент массива, который находится в моем 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 голосов
/ 09 февраля 2019

Как правило, вы не хотите делать это в своем редукторе, поскольку это должно быть чисто, но для достижения того, что вы хотите, вы можете просто сделать что-то вроде:

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

Это позволит сохранить порядок, изменить значение, клонировать состояние и избежать других циклов, которые вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...