2016-11-16 2 views
0

Насколько я понимаю, это решение Redux должно решить, но пока я пытаюсь сделать эту работу без него.Как обновить состояние вне Render?

Когда я запускаю это, я понимаю, что он застрял в шаблоне. Когда я бегу render это вызывает updateState() который изменяет состояние, что вызывает повторное рендеринга, который вызывает updateState() и так далее ...

Я получаю сообщение об ошибке:

Warning: setState(...): Cannot update during an existing state transition (such as within render or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to componentWillMount. 

Что componentWillMount делать? Какой был бы лучший способ структурировать это, поэтому, когда я вызываю <CreateRows />, он обновит состояние, но избежит цикла?

var CreateRows = React.createClass({ 
    updateState : function(){ 
     this.setState({ 
      'people' : [{'name':'something_else', 'email':'[email protected]'}] 
     }); 
     return (
       <tr> 
        <td>Morgan</td> 
        <td>[email protected]</td> 
       </tr> 

      ) 
    } 

    render: function(){ 
     return (
      <tbody> 
       {this.updateState()} 
      </tbody> 
     ) 
    } 
}); 

ответ

0

Не рекомендуется обновлять состояние на render, но после того, как компоненты оказаны вы можете обновить его, например, с помощью componentDidMount метода:

var CreateRows = React.createClass({ 
    updateState : function(){ 
     this.setState({ 
      'people' : [{'name':'something_else', 'email':'[email protected]'}] 
     }); 
    }, 
    componentDidMount: function() { 
     this.updateState(); 
    }, 
    render: function() { 
     return (
      <tbody> 
       <tr> 
        <td>Morgan</td> 
        <td>[email protected]</td> 
       </tr> 
      </tbody> 
     ); 
    } 
}); 
Смежные вопросы