2017-10-04 14 views
0

なぜこのコードは機能しませんか? 私はちょうどこのクラスの状態を小道具から設定したいが、状態は常に空である。州の値を小道具から設定できません

class BillsList extends React.Component{ 
 
    constructor (props: any){ 
 
      super(props); 
 
      this.state = {currentList : this.props.list}; 
 
    }; 
 
    render(){ 
 
     console.log(this.props.list); //It worked..! 
 
     console.log(this.state.currentList); //But this is empty 
 
     return(
 
      <div className="bill_list"> 
 
       {this.state.currentList.map((item,i)=> 
 
        <BillsItem key ={i} value={item} /> 
 
       )} 
 
      </div> 
 
     ) 
 
    } 
 
};

'リスト' この enter image description here

答えて

0

のような配列オブジェクトであるあなたは、以下のようにコードを変更する必要があります

class BillsList extends React.Component{ 
    constructor (props){ 
      super(props); 
      this.state = {currentList : props.list}; 
    }; 
    render(){ 
     console.log(this.props.list); //It worked..! 
     console.log(this.state.currentList); //But this is empty 
     return(
      <div className="bill_list"> 
       {this.state.currentList.map((item,i)=> 
        <BillsItem key ={i} value={item} /> 
       )} 
      </div> 
     ) 
    } 
}; 
+0

感謝をしたいと思いますが、それはそれは私のために働い –

+0

どちらか動作しません。とにかくあなたはこれ以上の情報を読むことができます:https://medium.com/@justintulk/react-anti-patterns-props-in-initial-state-28687846cc2e –

0

を私はあなたの小道具を後に受信されると思いますコンポーネントが初期化されます。だからその場合は、componentWillReceivePropsを使用して状態を更新する必要があります。 あなたのケースでは、そのアイデアについては、以下の

componentWillReceiveProps(nextProps) { 
    if(this.props.list !== nextProps.list) { 
    this.setState({ 
     currentList: nextProps.list, 
    }); 
    } 
} 
+0

ありがとう!それは働いた しかし、なぜそれは配列オブジェクトで動作しない文字列で動作しますか? –

+0

状態には依存しません。それは、その小道具がどのようにコンポーネントに送られるかによって決まります。データが他のソース(httpなど)から取得された場合、データが受信されてからコンポーネントに送信されるまでに時間がかかることがあります。 – Panther

関連する問題