2016-11-23 12 views
0

Когда я изменить состояние на дочерних компонентах, делая что-то вроде этого:response - Почему состояние родительского компонента изменяется при использовании состояния обновления для Child?

// inside child component 
var stateToSet = this.state; 
stateToSet[active] = false; 
this.setState(nextState); 

изменения родительского состояния без перерисовки.

Я полагаю, что родительский компонент this.state которую ссылаются при stateToSet[active] = false, поэтому я Object.assign «d состоянии и каждое свойство я хочу изменить, а затем он работает без изменения состояния Родителя.

Хотелось бы теперь, почему это происходит. Может ли это быть поведенческое поведение? Может быть проблемой Brunch (мой компилятор) и конкатенацией файлов?

Любые идеи?

+0

Не могли бы вы разместить соответствующий код из родительского и дочернего компонентов? Вы запускаете любые функции обратного вызова от дочернего к родительскому? В идеале изменение состояния дочернего компонента не влияет на родителя. –

ответ

0

Yup, поэтому вы никогда не должны изменять состояние напрямую, как здесь, потому что this.setState фактически вызовет все методы жизненного цикла вашего компонента и изменяет состояние, как здесь. Эта функция принимает ключи, которые вы хотите изменить, поэтому не нужно Object.assign или ....

this.setState({ active: false }) 

Я не уверен, что вы имеете в виду родителя/ребенка, хотя и почему установка родитель ребенка будет иметь ничего общего с родителя, но если вы имеете в виду, что родитель не повторно вынесено, когда ребенка изменения состояния, то это намеченное поведение.

+0

Я упростил код в вопросе, но теперь кажется, что он не помогает. Мне нужно изменить элемент специфицированного массива с чем-то вроде 'this.setState ({filters [filterIndex] = updatedFilter})' (это не работает, это просто пример) – arteepa

+0

Я не вижу никаких изменений в вопросе. Не могли бы вы разместить больше кода? Непонятно, что вы спрашиваете, так как большая часть деталей отсутствует. – ZekeDroid

 Смежные вопросы

  • Нет связанных вопросов^_^