2014-10-17 2 views
9

내 React 렌더에서 지속적인 문제가 발생합니다.반응 렌더링의 불변의 위반 또는 반복의 올바른 방법

이 코드

/** @jsx React.DOM */ 
var AnswerRows = React.createClass({ 
    componentDidMount: function() { 
    }, 
    render: function() { 
    {this.props.answers.map(function(answer, i) { 
     return (
     <div id="answerRow"> 
      <label className="AnswerText"> 
      <input type="checkbox" value={answer.id} /> 
      {answer.text} 
      </label> 
     </div> 
    ); 
    }, this)} 
    } 
}); 

var QuizTaking = React.createClass({ 
    componentDidMount: function() { 
    }, 
    render: function() { 
    return (
     <div className="card-holder"> 
     <div className="showQuestionCard x-card host"> 
      <h3 dangerouslySetInnerHTML={{__html: this.props.question.text}}></h3> 
      <div className="answerRows"> 
      <AnswerRows answers={this.props.question.answers}/> 
      </div> 
      <div className='submitAnswers'></div> 
     </div> 
     <div className="paper-shadow-bottom"></div> 
     </div> 
    ) 
    } 
}) 

나에게 Invariant Violation: AnswerRows.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object. 오류를 줄 것이다. 난 정말 여기에 가고, 그리고 그것을 할 아마도 '올바른'방법을 이해하고 싶습니다

/** @jsx React.DOM */ 

var TestIndex = React.createClass({ 

    propTypes: { 
    }, 
    loadTest: function(i) { 
    window.location.replace(this.props.tests[i].url.replace(".json", "/take")) 
    }, 

    render: function() { 
    return(
     <div className="testTable card-holder"> 
     <div className="card-contents"> 
      {this.props.tests.map(function(test, i) { 
      return (
       <div className="testTableRow x-card host" key={test.id}> 
       <label className="__TITLE">{test.title} 
        <button onClick={this.loadTest.bind(test, i)} key={i} type="button" className="StartButton paper-button raisedButton">Start this test</button> 
       </label> 
       <div className="paper-shadow-bottom"></div> 
       </div> 
      ); 
      }, this)} 
     </div> 
     </div> 
    ) 
    } 
}); 

: 그러나,이 모든 시간을 작동합니다.

답변

25

map 함수가 반환 한 배열과 같은 여러 요소를 render 함수에서 반환 할 수 없습니다. 또한 return 문이 누락되었습니다. 이것을 시도하십시오 :

var AnswerRows = React.createClass({ 
    componentDidMount: function() { 
    }, 
    render: function() { 
    return (
     <div> 
     {this.props.answers.map(function(answer, i) { 
      return (
      <div id="answerRow"> 
       <label className="AnswerText"> 
       <input type="checkbox" value={answer.id} /> 
       {answer.text} 
       </label> 
      </div> 
     ); 
     }, this)} 
     </div> 
    ); 
    } 
}); 
+2

div 안에 마지막 줄을 설명해 주시겠습니까? 왜 이것이지도에 전달되는거야? – monkeyjumps

+0

더 자세히 설명해주세요. 나는이 정확한 문제를 겪고 있으며 해결책을 완전히 이해하지 못하고있다. – sweeds

+1

@monkeyjumps 이것은 map에 전달 된 함수 내의'this'의 값이 render 함수 내부의'this'의 값과 동일한 지 확인하는 것입니다. 자세한 내용은 map의 문서를 참조하십시오. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map – Becojo

관련 문제