React データ キャッシュ ガイド: フロントエンド データの取得と更新の効率を最適化する方法

王林
リリース: 2023-09-29 14:37:08
オリジナル
1391 人が閲覧しました

React データ キャッシュ ガイド: フロントエンド データの取得と更新の効率を最適化する方法

React データ キャッシュ ガイド: フロントエンド データの取得と更新の効率を最適化する方法

はじめに:
Web アプリケーションを開発するとき、多くの場合、次のことが必要になります。バックエンドから開始 データを取得してフロントエンドに表示します。ただし、データを取得するたびにサーバーにリクエストを送信する必要があるため、一定の遅延が発生し、ユーザー エクスペリエンスに影響を与えます。フロントエンドデータの取得と更新の効率を向上させるために、データキャッシュテクノロジーを使用できます。この記事では、React アプリケーションでデータ キャッシュを使用してデータの取得と更新の効率を最適化する方法を紹介し、具体的なコード例を示します。

  1. キャッシュ ライブラリの使用
    キャッシュ ライブラリの使用は、シンプルで一般的に使用されるデータ キャッシュ テクノロジです。対応するキャッシュライブラリを導入することで、取得したデータをキャッシュに保存することができ、次回同じデータをリクエストする際にはリクエストを行わずに直接キャッシュから読み込むことができます。

以下は、Cache ライブラリを使用したサンプル コードです。

import Cache from 'cache';

const dataCache = new Cache();

function fetchData(url) {
  if (dataCache.has(url)) {
    return Promise.resolve(dataCache.get(url));
  }

  return fetch(url)
    .then(response => response.json())
    .then(data => {
      dataCache.set(url, data);
      return data;
    });
}

fetchData('/api/data1')
  .then(data => console.log(data));
ログイン後にコピー

上の例では、dataCache はキャッシュ インスタンスです。 has メソッドを使用して、対応するデータがキャッシュに存在するかどうかを確認し、存在する場合は直接返します。そうでない場合は、fetch メソッドを使用して API からデータを取得します。それをキャッシュに保存してからデータを返します。

  1. React Context の使用
    React Context は、React バージョン 16.3 以降に導入されたデータ転送方法です。アプリケーション全体のコンポーネント ツリーにデータを注入して、必要な場所にデータを取得できます。 React Contextを利用することで、取得したデータをコンポーネント間で共有し、不要なリクエストを削減することができます。

以下は React Context を使用したサンプル コードです:

// 创建一个Context
const DataContext = React.createContext();

// 提供数据的组件
function DataProvider({ children }) {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch('/api/data')
      .then(response => response.json())
      .then(data => setData(data));
  }, []);

  return (
    <DataContext.Provider value={data}>
      {children}
    </DataContext.Provider>
  );
}

// 使用数据的组件
function DataConsumer() {
  const data = useContext(DataContext);

  if (data === null) {
    return <div>Loading...</div>;
  }

  return (
    <div>{data}</div>
  );
}

// 在应用程序中使用数据
function App() {
  return (
    <DataProvider>
      <DataConsumer />
    </DataProvider>
  );
}

ReactDOM.render(<App />, document.getElementById('root'));
ログイン後にコピー

上の例では、createContext メソッドを通じて DataContext を作成しました。を実行し、DataProvider コンポーネント内のデータを取得して、DataContext.Provider に渡します。次に、DataConsumer コンポーネントの useContext メソッドを使用してデータを取得します。データが空の場合は「読み込み中...」が表示され、空の場合はデータが表示されます。

  1. Redux の使用
    Redux は、すべてのアプリケーションの状態を統合ストアに保存できる予測可能な状態コンテナです。 Redux を使用すると、データをストアにキャッシュし、繰り返しフェッチすることなく、必要な場所にデータをフェッチできます。

以下は Redux を使用したサンプル コードです:

import { createStore } from 'redux';

// 定义数据状态的reducers
function dataReducer(state = null, action) {
  switch (action.type) {
    case 'SET_DATA':
      return action.payload;
    default:
      return state;
  }
}

// 创建store
const store = createStore(dataReducer);

// 获取数据的动作
function fetchData() {
  return dispatch => {
    if (store.getState() !== null) {
      return;
    }

    fetch('/api/data')
      .then(response => response.json())
      .then(data => {
        dispatch({ type: 'SET_DATA', payload: data });
      });
  };
}

// 在应用程序中使用数据
store.dispatch(fetchData());

function App() {
  const data = store.getState();

  if (data === null) {
    return <div>Loading...</div>;
  }

  return (
    <div>{data}</div>
  );
}

ReactDOM.render(<App />, document.getElementById('root'));
ログイン後にコピー

上の例では、まずデータ ステータスのレデューサを定義し、fetchData でそれを取得します。アクション データを作成し、dispatch メソッドを通じてデータをストアに保存します。次に、App コンポーネントの store.getState メソッドを使用してデータを取得します。データが空の場合は「読み込み中...」が表示され、空の場合はデータが表示されます。表示されます。

結論:
データ キャッシュ テクノロジを使用すると、フロントエンド データの取得と更新の効率が大幅に向上し、不必要なネットワーク リクエストが削減され、ユーザー エクスペリエンスが向上します。この記事では、キャッシュ ライブラリ、React Context および Redux を使用した 3 つの一般的なデータ キャッシュ テクノロジを紹介し、具体的なコード例を示します。この記事がデータ キャッシュの理解と適用に役立つことを願っています。

以上がReact データ キャッシュ ガイド: フロントエンド データの取得と更新の効率を最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート