2016-07-25 2 views
0
getInitialState: function() { 
    p:{'Keeper' : [] , 'Defenders': [] , 'Midfield' : [], 'Forwards' : []}} 
} 
onUpdatePlayers : function (newState) { 
    var pos; 

    if (newState.position.includes('Back')) { 
     pos = 'Defenders' 
    } else if (newState.position.includes('Midfield')){ 
     pos = 'Midfield' 
    } else if (newState.position.includes('Forward')) { 
     pos = 'Forwards' 
    } else { 
     pos = newState.position; 
    } 

    this.state.p[pos].push(newState) 
} 

В принципе, я хочу подтолкнуть некоторые массивы к свойствам нескольких состояний. Как-то мне нужно изменить этот код «this.state.p [pos] .push (newState)» на использование this.setState. Я нашел это и нашел что-то вродеReact - Push массив к состоянию

this.setState({ 
     p : this.state.p[pos].concat([newState]) 
    }); 

Очевидно, что это совсем не помогает. Не могли бы вы посоветовать мне об этом? Это будет большое спасибо,

Cheers !!

ответ

0

Если вам действительно нужно, чтобы ваше состояние было глубоко вложенным, вам нужно заменить весь объект p новым объектом. Например, используя Object.assign

this.setState({ 
    p: Object.assign(this.state.p, { 
    [pos]: this.state.p[pos].concat(newState) 
    }) 
}) 
+0

Спасибо, Юрий, Он работает с вашим методом. !! , но, я думаю, это не лучший способ определить массив множественного состояния, используя метод getInitialState. Предположим, у меня нет InitialState. Более чистый и лучший способ вернуть тот же результат? но не использовать глубоко вложенные или использовать Object.assign? –

+0

«Это работает с вашим методом». не могли бы вы уточнить это? Если newState - массив, этот код должен конкатцировать его с тем, который у вас есть в состоянии. 'Object.assign' работает на 1 уровне. Вам нужно написать код или использовать библиотеку (например, lodash), чтобы сделать глубокое клонирование. –

0

Danny Kim, вам не хватает цитаты на новом ключе вы хотели бы добавить. Измените свою последнюю строку на

this.state.p['pos'].push(newState) 
+1

pos - область переменных. Не строка. Спасибо в любом случае –