2015-02-06 1 views
3

체크 상자의 이벤트를 기반으로 일부 HTML을 표시해야합니다. 부모 노드의 내 onClick 이벤트가 forEach 루프에 배치 될 때 함수를 전달하지 않습니다. (here's my fiddle). 그것에 대해 이상한 점은 하나의 요소에 전달할 때 함수를 전달한다는 것입니다. 이런 일이 왜onClick 이벤트가 ReactJS의 forEach 루프에 배치되었을 때 함수를 전달하지 않습니다.

var App = React.createClass({ 
 
    getInitialState: function() { 
 
    return {toggle: false} 
 
    }, 
 
    handleClick : function(event){ 
 
    this.setState({toggle : !this.state.toggle}); 
 
    }, 
 
    render: function(){ 
 
    var checkboxes = []; 
 
    this.props.data.forEach(
 
     function(name) 
 
     { 
 
     checkboxes.push(<CheckBox onClick={this.handleClick} name={name} />); 
 
         }); 
 
     var textBox = this.state.toggle ? <InputBox name="Bar" /> : null; 
 
     return (
 
      <div> 
 
      <CheckBox name="Foo" onClick={this.handleClick} /> 
 
      {checkboxes} 
 
      {textBox} 
 
      </div> 
 
     ); 
 
     } 
 
});

는 아는 사람 있나요? 이 버그입니까 아니면 내가 잘못하고있는 거지?

답변

6

this.handleClickno longer refers to the React component objectthis은 forEach에 익명 함수가 전달되어 있기 때문입니다. 일반적으로이 함수의 this 문맥의 그것의 Foreach은이

this.props.data.forEach(
    function(name) { ... }.bind(this)); 

등이 bind 수 있습니다, 당신은 또한 단지 두 번째 인수로 전달할 수 있습니다.

this.props.data.forEach(
    function(name) { ... }, this); 
+0

'this'는 실제로 정의되지 않았으며 forEach 콜백에서 비 엄격 모드의 전역 개체입니다. – FakeRainBrigand

+0

'forEach'는 선택적인 두 번째 인수를'this' 문맥으로 취하며'bind'를 호출 할 필요가 없습니다 : this.props.data.forEach (function() {...}, this);' –

+0

죄송합니다. 나는 아직도 '이'에 대해 더 배워야한다고 생각한다. 내 원래 답변을 수정했습니다. 왜냐하면'this'를 인수로 전달하는 것이 옵션이 아닌 유사한 상황을 알면 유용 할 수 있기 때문입니다. –

관련 문제