Reactで、カスタムフックの複数のインスタンスを回避するにはどうすればよいですか?

Felipe de Abreu Prazeres

同じプレーヤーのリストにアクセスする必要があるコンポーネントがいくつかあります。このプレイヤーのリストは変更されませんが、どのコンポーネントが最初にそれを必要とするかはわかりません。ここでの私の考えは、最初にそれを必要とするコンポーネント(axiosリクエスト)が私のreduxストアを更新し、次に他のコンポーネントがこれと同じカスタムフックを使用するということです。

export default function usePlayersList() {
  const {list, loading, error} = useSelector(state => state.accounts.players)
  const dispatch = useDispatch()
  
  useEffect(() => {
    try {
      const response = authAxios.get(endpoints.players.retrieve)
      response.then(res => {
          dispatch({
            type: "SET_PLAYERS_LIST",
            payload: {
              error: false,
              loading: false,
              list: res.data.payload
            }
          })
        })
    } catch (e) {
      console.log(e)
      dispatch({
        type: "SET_PLAYERS_LIST", 
        payload: {
          error: true,
          loading: false,
          list: []
        }
      })
    }
  }, [dispatch])
  return {list, loading, error}
}

これはそのための私のカスタムフックです。それを行うことに不便があるかどうか、またはそのようなためのより良いパターンがあるかどうか疑問に思います。前もって感謝します。

ところで...さらに良いことに、(redux状態に送信するのではなく)usePlayersList内のuseState変数としてロードとエラーを設定します。これによりエラーが発生したため(この状態がコンポーネントごとに個別になると仮定すると、コンポーネントごとに読み込みとエラーが異なります)、それらをストアに送信しました。

よろしく、フェリペ。

ラメシュレディ

各コンポーネントが独自のインスタンスを持つようなことを避けるには、reactのコンテキストAPIを使用する方が良いかもしれません

コンテキストの定義:

import React from 'react';

const PlayersContext = React.createContext();
const PlayersProvider = PlayersContext.Provider;

export const usePlayersContext = () => React.useContext(PlayersContext);

export default function PlayersProvider({ children }) {
  // add all the logic, side effects here and pass them to value
  const { list, loading, error } = useSelector(
    (state) => state.accounts.players
  );
  const dispatch = useDispatch();

  useEffect(() => {
    try {
      const response = authAxios.get(endpoints.players.retrieve);
      response.then((res) => {
        dispatch({
          type: 'SET_PLAYERS_LIST',
          payload: {
            error: false,
            loading: false,
            list: res.data.payload,
          },
        });
      });
    } catch (e) {
      console.log(e);
      dispatch({
        type: 'SET_PLAYERS_LIST',
        payload: {
          error: true,
          loading: false,
          list: [],
        },
      });
    }
  }, [dispatch]);

  return <PlayersProvider value={{ list, loading, error }}>{children}</PlayersProvider>;
}

PlayersProviderプレーヤーへのアクセスが必要なコンポーネントに親としてを追加します。

そしてそれらの子コンポーネントの内部:

import {usePlayersContext} from 'contextfilepath'

function Child() {
  
  const { list, loading, error } = usePlayersContext()
  return ( ... )
}

またProvider、reduxではなくそれ自体で状態を維持することもできます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

リーフレットで複数のカスタムアイコンを定義するにはどうすればよいですか?

分類Dev

複数のカスタムコントロールボタンリーフレットjsを追加するにはどうすればよいですか?

分類Dev

初心者:パーマリンクをWP_Queryの複数のカスタム投稿タイプに追加するにはどうすればよいですか?

分類Dev

1 つのインターフェースで複数のサブネットをリンクするにはどうすればよいですか?

分類Dev

複数のポイントプロットにseabornを使用してカスタム色相を追加するにはどうすればよいですか?

分類Dev

djangoでカスタムミックスインを作成するにはどうすればよいですか?

分類Dev

リスト形式のデータフレームの重複インデックスを削除するにはどうすればよいですか?

分類Dev

gccの複数のインスタンスを使用するにはどうすればよいですか?

分類Dev

AndroidStudioの複数のインスタンスを実行するにはどうすればよいですか

分類Dev

Igniteの複数のインスタンスを作成するにはどうすればよいですか?

分類Dev

敵の複数のインスタンスを作成するにはどうすればよいですか?

分類Dev

gccの複数のインスタンスを使用するにはどうすればよいですか?

分類Dev

Telegramの複数のインスタンスを実行するにはどうすればよいですか?

分類Dev

このタイプのカスタムタブデザインをフラッターで実現するにはどうすればよいですか?

分類Dev

Pythonセットからカスタムオブジェクトのインスタンスを削除するにはどうすればよいですか?

分類Dev

Mediawiki拡張機能のカスタムフックイベントのソース定義を追跡するにはどうすればよいですか?

分類Dev

JUnitテスト用のモックカフカトピックをインスタンス化するにはどうすればよいですか?

分類Dev

関数内でパンダのデータフレームのインデックスを再作成するにはどうすればよいですか?

分類Dev

複数のランダムな要素/アイテムをスタックに印刷するにはどうすればよいですか?

分類Dev

複数のヘッダーファイルのインターフェイスからオーバーライドされた関数を宣言するときにコードの重複を回避するにはどうすればよいですか?

分類Dev

複数のスイッチをスタックするにはどうすればよいですか?

分類Dev

複数のTomcatインスタンスを設定するにはどうすればよいですか?

分類Dev

スポットインスタンスの生成中にフリートオプションを回避するにはどうすればよいですか?

分類Dev

RailsのタイムスタンプにPostgreSQLのBETWEENを使用して重複を回避するにはどうすればよいですか?

分類Dev

グリッドに複数のカスタム形状のボタンを追加するにはどうすればよいですか?

分類Dev

グリッドに複数のカスタム形状のボタンを追加するにはどうすればよいですか?

分類Dev

dask:タスクのタイムアウトを回避するにはどうすればよいですか?

分類Dev

kotlinでカスタムフォントを使用してTextViewのカスタムクラスを作成するにはどうすればよいですか?

分類Dev

javascriptのカスタムコンストラクターにカスタムメソッドを追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    リーフレットで複数のカスタムアイコンを定義するにはどうすればよいですか?

  2. 2

    複数のカスタムコントロールボタンリーフレットjsを追加するにはどうすればよいですか?

  3. 3

    初心者:パーマリンクをWP_Queryの複数のカスタム投稿タイプに追加するにはどうすればよいですか?

  4. 4

    1 つのインターフェースで複数のサブネットをリンクするにはどうすればよいですか?

  5. 5

    複数のポイントプロットにseabornを使用してカスタム色相を追加するにはどうすればよいですか?

  6. 6

    djangoでカスタムミックスインを作成するにはどうすればよいですか?

  7. 7

    リスト形式のデータフレームの重複インデックスを削除するにはどうすればよいですか?

  8. 8

    gccの複数のインスタンスを使用するにはどうすればよいですか?

  9. 9

    AndroidStudioの複数のインスタンスを実行するにはどうすればよいですか

  10. 10

    Igniteの複数のインスタンスを作成するにはどうすればよいですか?

  11. 11

    敵の複数のインスタンスを作成するにはどうすればよいですか?

  12. 12

    gccの複数のインスタンスを使用するにはどうすればよいですか?

  13. 13

    Telegramの複数のインスタンスを実行するにはどうすればよいですか?

  14. 14

    このタイプのカスタムタブデザインをフラッターで実現するにはどうすればよいですか?

  15. 15

    Pythonセットからカスタムオブジェクトのインスタンスを削除するにはどうすればよいですか?

  16. 16

    Mediawiki拡張機能のカスタムフックイベントのソース定義を追跡するにはどうすればよいですか?

  17. 17

    JUnitテスト用のモックカフカトピックをインスタンス化するにはどうすればよいですか?

  18. 18

    関数内でパンダのデータフレームのインデックスを再作成するにはどうすればよいですか?

  19. 19

    複数のランダムな要素/アイテムをスタックに印刷するにはどうすればよいですか?

  20. 20

    複数のヘッダーファイルのインターフェイスからオーバーライドされた関数を宣言するときにコードの重複を回避するにはどうすればよいですか?

  21. 21

    複数のスイッチをスタックするにはどうすればよいですか?

  22. 22

    複数のTomcatインスタンスを設定するにはどうすればよいですか?

  23. 23

    スポットインスタンスの生成中にフリートオプションを回避するにはどうすればよいですか?

  24. 24

    RailsのタイムスタンプにPostgreSQLのBETWEENを使用して重複を回避するにはどうすればよいですか?

  25. 25

    グリッドに複数のカスタム形状のボタンを追加するにはどうすればよいですか?

  26. 26

    グリッドに複数のカスタム形状のボタンを追加するにはどうすればよいですか?

  27. 27

    dask:タスクのタイムアウトを回避するにはどうすればよいですか?

  28. 28

    kotlinでカスタムフォントを使用してTextViewのカスタムクラスを作成するにはどうすればよいですか?

  29. 29

    javascriptのカスタムコンストラクターにカスタムメソッドを追加するにはどうすればよいですか?

ホットタグ

アーカイブ