2017-03-15 5 views
0

こんにちは私はAxiosを使用してReactでJSONデータを取得していますが、フェッチされたデータ内で検索することができないという問題があります。Axiosのデータとマルチコンポーネントの検索

親コンポーネントのデータを取得しようとしましたが、要求が非同期であるため、子コンポーネントが最初にロードされてからデータがフェッチされます。以下は

私のコードです:

axios.get("/url.json") 
    .then(function(result) { 
     teams= result.data.teams 
    }); 

ReactDOM.render(
<div> 
    <App teams={teams}/> 
</div> 
,document.getElementById('app') 
) 

私は、検索用のデータを保存する方法子コンポーネント内axiosを使用してデータをフェッチする場合は?つまり、フィルタリングされていないデータを検索する必要があります。

答えて

0

要求が成功した後にReactDOM.renderと呼んでください:私はaxiosのコールバックの内側にありません。ベストプラクティスとして

axios.get("/url.json") 
    .then(function(result) { 
     const teams= result.data.teams; 
     ReactDOM.render(
     <div> 
     <App teams={teams}/> 
     </div> 
     ,document.getElementById('app') 
    ) 
    }); 

..... OR .....

、あなたはそのcomponentDidMountの内側に、このコールを処理し、別の層(超親)を追加することができます

class Root extends React.Component { 

    constructor() { 
    super(...arguments); 
    this.state= {teams : []}; 
    } 
    componentDidMount() { 
    axios.get("/url.json") 
     .then((result) => { 
      this.setState({teams: result.data.teams}) 
     }); 
    } 

    render() { 

    return (
     <div> 
      <App teams={this.state.teams}/> 
     </div> 
    ) 
    } 


} 

ReactDOM.render(
    <Root /> 
    ,document.getElementById('app') 
) 
+0

親コンポーネントを使用すると、Axiosがデータを取得する前に子コンポーネントをレンダリングしないでください。 – murtazamzk

+0

そのため、 'setState'はコンテンツを再レンダリングするので、' this.setState'を使用します。それを試してみましょう –

+0

私はそれを試しました、子コンポーネントは、空のリストを表示しない、私は親コンポーネントから子コンポーネントの状態を設定するためにgetInitialStateを使用している。 – murtazamzk