React afterAsync関数で配列からオブジェクトをレンダリングする

Tigerr107

dataオブジェクトのコレクションを含む配列が自分の状態にありますが、オブジェクトに格納されている情報の一部にアクセスしてレンダリングしようとすると、期待されるテキストがページに表示されません。

このための現在のコードは、次のようにレンダリング関数にあります。

<ul>
    {this.state.data.map(match =>
    <Link to={'teams/'+ team.homeId} key={match.id}><li>{match.homeTeam}</li></Link>
<ul>

コンソールの要素を確認するとundefined、データがどこにあるのかがわかります。

情報は関数内のawait axios.get()リクエスト内で取得されasync componentDidMount()ます。これにより、レンダリングが発生したときにデータがまだ取得されていないため、データが正しく表示されない可能性があると思われますが、よくわかりません。

私は以前に定義しようとしたlet match = this.state.data || {}ので、後は私のレンダリングはリロードするだろうと、私のレンダリングの初めにsetState、私の中で行われたcomponentDidMount、しかし、これは動作しませんでした。任意の方向をいただければ幸いです。

モンテクリストの要求に従って編集します。

class Welcome extends Component {
    constructor(props) {
        super(props)
        this.state = {
            data: []
        }
    }


    async componentDidMount() {
        let res = await axios.get(`https://soccer.sportmonks.com/api/v2.0/livescores?api_token=${API}`)
        let matchInfo = new Array(res.data.data.length).fill().map(_ => ({}))

        res.data.data.forEach((id, i) => Object.assign(matchInfo[i], {id: id.id, homeScore: id.scores.localteam_score}, {awayScore: id.scores.visitorteam_score}))

        res.data.data.forEach((id, i) => {
            axios.get(`https://soccer.sportmonks.com/api/v2.0/teams/${id.localteam_id}?api_token=${API}`)
            .then(res1 => {
                Object.assign(matchInfo[i], {homeId: res1.data.data.id, homeTeam: res1.data.data.name})
            })
        })
        res.data.data.forEach((id, i) => {
            axios.get(`https://soccer.sportmonks.com/api/v2.0/teams/${id.visitorteam_id}?api_token=${API}`)
            .then(res2 => {
                Object.assign(matchInfo[i], {awayId: res2.data.data.id, awayTeam: res2.data.data.name})
            })
        })
        res.data.data.forEach((id, i) => {axios.get(`https://soccer.sportmonks.com/api/v2.0/leagues/${id.league_id}?api_token=${API}`)
            .then(res3 => {
                Object.assign(matchInfo[i], {leagueName: res3.data.data.name})
            })
        })
        this.setState({
            data: [...this.state.data, ...matchInfo]
        })
    }


    render() { 
        return ( 
            <div>
                <p className="text-xl font-semibold">Live Matches</p>
                <div>
                    <ul>
                        {this.state.data.map(match => 
                        <Link to={'teams/'+ match.homeId} key={match.id}><li>{match.homeTeam}</li></Link>)}
                    </ul>
                </div>
            </div>
         );
    }
}

export default Welcome;
ヤコブ

リクエストが完了するのを実際に待つ必要があります。

あなたはやっているthis.setState({ data: [...this.state.data, ...matchInfo] })一番下に、しかし、あなたが変異しているmatchInfoので、非同期オブジェクトをsetState発生している前に、すべてのそれらのaxiosが完了要請します。状態を変更しても再レンダリングは発生せず、を介して設定するだけですsetState

代わりにすべてのaxios呼び出しを待ち、呼び出す前にオブジェクトをビルドするとsetState、探しているものが得られます。

async componentDidMount() {
  const soccerApi = axios.create({
    baseURL: 'https://soccer.sportmonks.com/api/v2.0',
    params: { api_token: API }
  });
  const res = await soccerApi.get(`/livescores`);
  const matchInfo = await Promise.all(res.data.data.map(async row => {
    const [homeTeamInfo, awayTeamInfo, leagueInfo] = await Promise.all([
      soccerApi.get(`/teams/${row.localteam_id}`),
      soccerApi.get(`/teams/${row.visitorteam_id}`),
      soccerApi.get(`/leagues/${row.league_id}`)
    ]);
    return { 
      id: row.id,
      homeScore: row.scores.localteam_score,
      awayScore: row.scores.visitorteam_score,
      homeId: homeTeamInfo.data.data.id,
      homeTeam: homeTeamInfo.data.data.name,
      awayId: awayTeamInfo.data.data.id,
      awayTeam: awayTeamInfo.data.data.name,
      leagueName: leagueInfo.data.data.name
    };
  }));
  this.setState({
    data: [...this.state.data, ...matchInfo]
  });
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

react関数でオブジェクト配列をレンダリングする

分類Dev

Reactで配列/オブジェクトをレンダリングする

分類Dev

Reactでオブジェクトの配列をレンダリングする

分類Dev

オブジェクトの配列をレンダリングするReact

分類Dev

コンポーネント/関数ではなくオブジェクトを使用してreact-route-domから<Route />をレンダリングする方法

分類Dev

Reactオブジェクトのjavascript配列からテーブルをレンダリングします

分類Dev

Reactレンダリング関数でJSONオブジェクトから値を取得するにはどうすればよいですか?

分類Dev

オブジェクト値からReact要素をレンダリングする

分類Dev

Reactでオブジェクトの配列をソートしてレンダリングする

分類Dev

Reactでオブジェクトの配列をレンダリングする方法は?

分類Dev

オブジェクト配列をreactでレンダリングする方法は?

分類Dev

Reactでオブジェクトのリストを左から右にレンダリングする

分類Dev

JavaScriptオブジェクトからReactでデータのテーブルをレンダリングする

分類Dev

Reactでのオブジェクト配列からの要素のレンダリング

分類Dev

Reactで同じ<li>タグ内のオブジェクトの配列をレンダリングするにはどうすればよいですか?

分類Dev

Reactでオブジェクトに保存されている配列をレンダリングするにはどうすればよいですか?

分類Dev

Reactでオブジェクトを配列から配列、別のオブジェクトに移動するときの位置のミラーリング

分類Dev

REACT JS:JSXでレンダリングするオブジェクトの配列にマップします

分類Dev

ネストされたオブジェクトの配列をreactでレンダリングします

分類Dev

オブジェクトの配列からのReactコンポーネントのレンダリング

分類Dev

jsonオブジェクトからreactコンポーネントをレンダリングする方法は?

分類Dev

Reduxストアからのオブジェクトの配列をReactコンポーネントとしてレンダリングします

分類Dev

React:<ul> </ ul>内の関数からIDを使用してリストオブジェクトを直接レンダリングしますか?

分類Dev

Reactでオブジェクトの配列を使用してコンポーネントをレンダリングする方法

分類Dev

Reactで配列から別のコンポーネントにオブジェクトをレンダリングするにはどうすればよいですか?

分類Dev

Reactレンダーメソッドqの変数からのオブジェクトの配列に関する問題

分類Dev

react-nativeでオブジェクトの配列をレンダリングできません

分類Dev

タイプがオブジェクトの配列であるReactフック状態をレンダリングする方法は?

分類Dev

マップするオブジェクトの配列なしでReact.jsの要素をループしてレンダリングする方法は?

Related 関連記事

  1. 1

    react関数でオブジェクト配列をレンダリングする

  2. 2

    Reactで配列/オブジェクトをレンダリングする

  3. 3

    Reactでオブジェクトの配列をレンダリングする

  4. 4

    オブジェクトの配列をレンダリングするReact

  5. 5

    コンポーネント/関数ではなくオブジェクトを使用してreact-route-domから<Route />をレンダリングする方法

  6. 6

    Reactオブジェクトのjavascript配列からテーブルをレンダリングします

  7. 7

    Reactレンダリング関数でJSONオブジェクトから値を取得するにはどうすればよいですか?

  8. 8

    オブジェクト値からReact要素をレンダリングする

  9. 9

    Reactでオブジェクトの配列をソートしてレンダリングする

  10. 10

    Reactでオブジェクトの配列をレンダリングする方法は?

  11. 11

    オブジェクト配列をreactでレンダリングする方法は?

  12. 12

    Reactでオブジェクトのリストを左から右にレンダリングする

  13. 13

    JavaScriptオブジェクトからReactでデータのテーブルをレンダリングする

  14. 14

    Reactでのオブジェクト配列からの要素のレンダリング

  15. 15

    Reactで同じ<li>タグ内のオブジェクトの配列をレンダリングするにはどうすればよいですか?

  16. 16

    Reactでオブジェクトに保存されている配列をレンダリングするにはどうすればよいですか?

  17. 17

    Reactでオブジェクトを配列から配列、別のオブジェクトに移動するときの位置のミラーリング

  18. 18

    REACT JS:JSXでレンダリングするオブジェクトの配列にマップします

  19. 19

    ネストされたオブジェクトの配列をreactでレンダリングします

  20. 20

    オブジェクトの配列からのReactコンポーネントのレンダリング

  21. 21

    jsonオブジェクトからreactコンポーネントをレンダリングする方法は?

  22. 22

    Reduxストアからのオブジェクトの配列をReactコンポーネントとしてレンダリングします

  23. 23

    React:<ul> </ ul>内の関数からIDを使用してリストオブジェクトを直接レンダリングしますか?

  24. 24

    Reactでオブジェクトの配列を使用してコンポーネントをレンダリングする方法

  25. 25

    Reactで配列から別のコンポーネントにオブジェクトをレンダリングするにはどうすればよいですか?

  26. 26

    Reactレンダーメソッドqの変数からのオブジェクトの配列に関する問題

  27. 27

    react-nativeでオブジェクトの配列をレンダリングできません

  28. 28

    タイプがオブジェクトの配列であるReactフック状態をレンダリングする方法は?

  29. 29

    マップするオブジェクトの配列なしでReact.jsの要素をループしてレンダリングする方法は?

ホットタグ

アーカイブ