Reactは一般的なスケルトン画面コンポーネントの例を実装します

Reactは一般的なスケルトン画面コンポーネントの例を実装します

スケルトンスクリーンとは何ですか?

この場所を発見した同志たちは、スケルトンスクリーンについて多かれ少なかれ知識を持っています。まずは一言言わせてください。スケルトン スクリーンは、ユーザーの弱いネットワーク エクスペリエンスを最適化し、待機中のユーザーの不安を効果的に軽減するソリューションです。

デモ

まずはデモを見て、最終製品の概要と使い方をざっと把握してみましょう。

npm で obiusm-react-components をインストールします
'obiusm-react-components' から { Skeleton } をインポートします。
  <スケルトン isVisible={true}>
    <div className="ラッパー">
      <div className="content1"></div>
      <div データスケルトン無視 = {true}> 123456</div>
      <div className="content2"></div>
      <div className="content3" データスケルトンスタイル={{ width: '50%' }}></div>
    </div>
  </スケルトン>

記述したコンポーネントの周りにレイヤーをラップするだけで、表示されるかどうかが決まります。

デザインのアイデア

スケルトンにより、ユーザーは実際のコンテンツが読み込まれる前にそれを認識できるため、ユーザー エクスペリエンスが向上します。作成するコンポーネントごとにスケルトンをカスタマイズする必要がある場合、非常に面倒になります。

React props のデータ転送方法のおかげで、props 内の ReactElement ツリー全体を簡単に取得できます。 次に、ツリーを再帰的に走査してその構造を模倣し、そのクラスをコピーしてスケルトンを自動的に生成するだけです。

しかし、実際の使用では、ツリー全体の構造をシミュレートせずに、最初の数層の構造のみが必要になる場合があります。また、自動的に生成されたスタイルが醜すぎるため、ノード スタイルをカスタマイズする必要がある可能性もあります。また、一部のフローティング レイヤー コンテンツに注意を払う必要がない場合や、特定のノードを無視したい場合もあります。

したがって、おそらく次の機能を実装する必要があるでしょう

  • 再帰の深さの設定
  • ノードを無視する方法を提供する
  • スケルトンノードのスタイルをカスタマイズするためのメソッドを提供します

具体的な実装

まず、スケルトン画面をレンダリングするか、実際の要素をレンダリングするかを決定するコンポーネント関数を定義します。

関数 Skeleton(props: Props) {
  もし (!props) {
    <div /> を返します。
  }
  (props.isVisible)の場合{
    createModal(props.children, props.depth || 4, 0) を返します。
  } それ以外 {
    props.children を返します。props.children: <div />;
  }
}

createModal は、Skeleton の下にラップされた div を再帰的にトラバースします。再帰するたびに、current に 1 を追加して下に渡します。このようにして、再帰のレイヤーがいくつ作成されたか、各ノードの data-skeleton-ignore に data-skeleton-style があるかどうかを判断し、特別に処理することができます。

const createModal = (子: ReactElement、深さ: 数値、現在: 数値) => {
  もし (
    深さ === 現在の ||
    (子 && child.props && child.props['data-skeleton-ignore'])
  ){
    戻る;
  }
  もし (
    子供 &&
    子.props &&
    子.props.children &&
    Array.isArray(child.props.children) &&
    現在の深さ < 1
  ){
    戻る (
      <div
        クラス名={`${
          child.props.className !== 未定義 ? child.props.className : ''
        } ${'react-skeleton'}`}
        スタイル={
          child.props && child.props['データスケルトンスタイル']
            ? child.props['データスケルトンスタイル']
            : {}
        }
        キー={Math.random() * 1000}
      >
        {child.props.children && child.props.children.length > 0
          ? child.props.children.map((child: any) => {
              createModal(child, depth, current + 1) を返します。
            })
          : '*'}
      </div>
    );
  } それ以外 {
    戻る (
      <div
        クラス名={`${
          child.props && child.props.className ? child.props.className : ''
        } ${'react-skeleton2'}`}
        スタイル={
          child.props && child.props['データスケルトンスタイル']
            ? child.props['データスケルトンスタイル']
            : {}
        }
        キー={Math.random() * 1000}
      >
        *
      </div>
    );
  }
};

完全なコードと使用方法のドキュメント

完全なコード obiusm-react-components

ドキュメント https://magic-zhu.github.io/obiusm-react-components-docs/components/skeleton/

これで、React を使用した一般的なスケルトン スクリーン コンポーネントの例の実装に関するこの記事は終了です。React スケルトン スクリーンに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • WeChatアプレットのスケルトン画面の実装例
  • Vueプロジェクトでスケルトンスクリーンを使用する方法
  • WeChatアプレットでスケルトンスクリーンを使用する方法
  • Taroアプレットにスケルトン画面実装コードを追加
  • Vueプロジェクトのスケルトンスクリーンインジェクションの実践についての簡単な説明
  • VUEシングルページアプリケーションスケルトンスクリーンソリューションの詳細な説明
  • Vue ページ スケルトン スクリーン インジェクション メソッド
  • Vueシングルページスケルトン画面実践記録について

<<:  メタタグのビューポートはデバイス画面のCSSを制御します

>>:  CSS3を使用してフォントカラーグラデーションを実装する

推薦する

docker を使用して Kong クラスター操作を構築する

docker コンテナの下に kong クラスターを構築するのは非常に簡単です。公式サイトの紹介も非...

MySQL のロングトランザクション例の詳細な説明

序文: 「MySQL 入門」シリーズの記事は終了しました。今後も引き続き MySQL に焦点を当て、...

ハードコーディングに別れを告げ、フロントエンドテーブルがインスタンスコードを自動的に計算できるようにします。

序文私のチームが税制モジュールを開発していたとき、計算問題、特にグリッド内の計算を解決するために時間...

React 星評価コンポーネントの実装

要件は、製品の評価データを渡すことであり、ページには対応する星の数が表示されます。 1. 異なる評価...

シンプルな HTML ビデオ プレーヤーを実装する方法

この記事では、シンプルな HTML ビデオ プレーヤーを実装する方法を紹介し、皆さんと共有します。詳...

CSS コード省略 div+css レイアウト コード省略仕様

略語を使用すると、CSS ファイルのサイズが小さくなり、読みやすくなります。 CSS 省略形の主なル...

MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Windows)

1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカ...

mysql5.7.20 のインストールと設定方法のグラフィック チュートリアル (mac)

MySQL 5.7.20のインストールと設定方法のグラフィックチュートリアルをあなたと共有します1...

単一行関数と文字計算日付プロセス制御を説明する MySQL の例

目次1. キャラクター機能1. ケースコントロール機能2. キャラクターコントロール機能2. 数学関...

ハイパーリンクに関するいくつかの質問

<br />ポテトチップスパーティーのこのエピソードに参加して、何人かの友達に会えてとて...

phpmyadmin を使用して MySQL 権限を設定する方法

目次ステップ 1: root ユーザーとしてログインします。ステップ 2: 新しいデータ テーブルを...

forループ内のvarの問題の解決

序文var は ES5 における変数宣言方法です。var で変数を宣言するとループ変数がグローバル変...

MySQL 8.0.12 のインストールと設定方法のグラフィックチュートリアル (Windows 版)

1. はじめにプロジェクトではMySQLを使用しています。インターネット上の例を参考にインストール...

MySQL無料インストールバージョンの設定チュートリアル

この記事では、参考までにMySQLの無料インストール構成チュートリアルを紹介します。具体的な内容は次...

MySQLデータベース設計:Pythonを使ったスキーマ操作方法の詳しい解説

矢が放たれる前に、弓は矢にささやきました。「お前の自由は私のものだ。」スキーマは矢のようなもので、弓...