2016-07-07 3 views
1
componentDidMount : function() 
{ 
    console.log(this);//1 
    console.log(this.state);//2 
} 

줄 1은 모든 상태 변수를 제외하고 모든 줄 바꿈을 표시하지만 줄 2는 빈 개체를 제공합니다. 왜? 상태 변수 나 다른 함수에 어떻게 접근합니까?"this"avaialable하지만 this.state는 사용할 수 없음

+0

상태로 구성 요소를 초기화하지 않은 경우. 'this.state'는 빈 객체가 될 것으로 예상됩니다. – xiaofan2406

+0

브라우저 콘솔은 게으르다. 그래서 당신의 요구에 따라 객체 참조를 지연 시키게된다. 'this' 참조의 실제 내용을 확인하려면 디버거를 사용하고 엔진이 고장난 동안 검사하십시오. – zerkms

+0

@ xiaofan2406 : 나는이 클래스에서 정의 된 함수를 의미했습니다. – Mihika

답변

1

사용하기 전에 상태를 정의해야하기 때문에 예상됩니다. ES6 클래스를 가진 일반적인 방법은 생성자 내에서 초기 상태를 정의하는 것입니다하는 등 :

class MyCmp extends React.Component { 
    constructor() { 
     super(); // don't forget to call superclass constructor 
     this.state = {foo: 1}; 
    } 

    componentDidMount() { 
     console.log(this);//1 
     console.log(this.state);//2 
    } 
} 

당신은 제안 고급 자바 스크립트를 (사용하는 경우 예를 들어, 당신은 할 경우 단계-0 또는 프로파일 같은 다른 단수 당신의 바벨 구성), 당신은 너무 급 숙박 시설로 정의 할 수 있습니다 : 내가 도움이되기를 바랍니다

var MyCmp = React.createClass({ 
    getInitialState: function() { 
     return { 
      foo: 1 
     } 
    }, 
    componentDidMount : function() { 
     console.log(this);//1 
     console.log(this.state);//2 
    } 
} 

: 당신이 ES6 클래스를 사용하지 않는 경우

class MyCmp extends React.Component { 
    state = { 
     foo: 1 
    }; 

    componentDidMount : function() { 
     console.log(this);//1 
     console.log(this.state);//2 
    } 
} 

, 당신은 같은 일을 할 것입니다. 반응을 즐기십시오!

+2

ES6을 사용하지 않는다면 (구성한다고 생각하십니까?) 구성 요소의 getInitialState 속성을 설정합니다. https://facebook.github.io/react/docs/component-specs.html – Fizz

+0

물론 사실, 나는 그것을 즉시 잡지 않았다. 고마워요 @Fizz, 대답을 업데이트했습니다. – Grgur

+0

저는 0.13 버전을 사용하고 있습니다 .. ES6이 아닙니다. n getInitialState를 사용하여 모든 구성 요소를 업데이트했습니다. – Mihika