2016-07-20 6 views
1

callBack의 하위 구성 요소로 내 기능을 보냅니다. 부모, 나는 setState 방법과 기능을 가지고 : states 객체입니다React SetState가 렌더를 호출하지 않습니다.

onInputUpdated(id){ 
    var array = {}; 
    let char = id.slice(-1); 
    console.log(this.state.states) 
    switch(char){ 
    case 'a': 
     array[id] = this.getY(ReactDOM.findDOMNode(this.refs[id].refs.inp).value); 
     break; 
    case 'b': 
     array[id] = this.getX(ReactDOM.findDOMNode(this.refs[id].refs.inp).value); 
     break; 
    } 

    let oldStates = this.state.states; 
    oldStates[id] = array[id]; 

    this.setState({ 
    states: oldStates 
    }); 
    console.log(oldStates); 
} 

.

이 후 states이 설정됩니다. 다음번에 그것을 볼 수 있습니다 callBack, 어디 콘솔에 인쇄가 있습니다. 그러나 render 메서드는 호출되지 않습니다. componentMount 동안 모든 것이 올바르게 렌더링됩니다.

어떻게해야합니까? 감사.

+0

"할 일", "모든 것을 올바르게 마운트하는 중 ..."등의 질문은 StackOverflow에서 올바른 질문이 아닙니다. 도움말 센터의 의견에 따라 질문을 편집하십시오. http://stackoverflow.com/help/mcve – Farside

답변

2

방금 ​​oldStates 변수 this.state.states에 대한 참조를 만들고 있어요, 그래서 당신은 setState를 호출하기 전에 효과적으로 상태를 변경하고 let oldStates = this.state.states;을 수행 할 때.

대신 복제본을 만들거나 (예 : let oldStates = Object.assign({}, this.state.states) 딥 클론이 필요한 경우 lodash 또는 비슷한 것을 사용하십시오.

+0

정말 고마워요. 그것은 작동합니다! –

0

나는 그것을 설정하고 다시 설정한다고 생각합니다. 객체의 새로운 인스턴스를 만들고 시도해보십시오. underscore을 사용하여 수행하는 방법입니다.

먼저 다음을 실행하십시오. . .

npm install --save underscore 

그런 다음 밑줄을 가져옵니다. . .

import _ from 'underscore'; 

다음 개체를 복제하십시오.

let oldStates = _.clone(this.state.states); 
관련 문제