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

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

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

1. 異なる評価に対応する3つの星の写真を用意する

ここに画像の説明を挿入
ここに画像の説明を挿入ここに画像の説明を挿入

2. 期待される結果

そのような

ここに画像の説明を挿入

電話

<StarScore スコア={data.wm_poi_score}/>

3. 受信したデータを処理する

スコアの整数部分と小数部分を取得する必要があります

wm_poi_score を this.props.score || とします。
スコアをwm_poi_score.toString()とします。
scoreArray = score.split('.'); とします。

4.7が渡された場合、結果のスコア配列は['4', '7']になります。

4. データに基づいて対応する星の数を計算する

// 完全な星の数 let fullstar = parseInt(scoreArray[0]);
// 半分の星の数 let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0;
// 灰色の星の数 let nullstar = 5 - fullstar - halfstar;

5. 星の数に応じてコンポーネントをレンダリングする

starjsx = [] とします。
// 完全な星をレンダリングする for (let i = 0; i < fullstar; i++) {
  starjsx.push(<div key={i + 'full'} className="star fullstar"></div>)
}
// 半分の星をレンダリングする if (halfstar) {
  (j = 0; j < ハーフスター; j++) の場合 {
    starjsx.push(<div key={j + 'half'} className="star halfstar"></div>)
  }
}
// 灰色の星をレンダリングします if (nullstar) {
  (k = 0; k < nullstar; k++ とします) {
    starjsx.push(<div key={k + 'null'} className="star nullstar"></div>)
  }
}

はい、望んでいた効果が達成されました。

6. 手動スコアリング

ここに画像の説明を挿入

ページが最初に表示されるときに、5 つの灰色の星が表示されます。各星にクリック イベントを追加します。クリックすると、星に対応する下付き文字インデックスが取得され、それにハイライト スタイルが追加されます。

<div className="スターエリア">
  {this.renderStar()}
</div>
doEva(i) {
  this.setState({
    開始インデックス: i + 1
  });
}

レンダースター() {
  配列 = [] とする
  (i = 0; i < 5; i++ とします) {
    cls = i >= this.state.startIndex ? "スターアイテム" : "スターアイテム ライト" とします
    配列.push(
      <div onClick={() => this.doEva(i)} キー={i} クラス名={cls}></div>
    )
  }
  配列を返す
}

完全なコード

'react' から React をインポートします。
'./StarScore.scss' をインポートします。

// 5つ星スコアメソッドをレンダリングする class StarScore extends React.Component {
  レンダリングスコア() {
    wm_poi_score を this.props.score || とします。
    スコアをwm_poi_score.toString()とします。
    scoreArray = score.split('.'); とします。
    // 完全な星の数 let fullstar = parseInt(scoreArray[0]);
    // 半分の星の数 let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0;
    // 灰色の星の数 let nullstar = 5 - fullstar - halfstar;
    starjsx = [] とします。

    // 完全な星をレンダリングする for (let i = 0; i < fullstar; i++) {
      starjsx.push(<div key={i + 'full'} className="star fullstar"></div>)
    }
    // 半分の星をレンダリングする if (halfstar) {
      (j = 0; j < ハーフスター; j++) の場合 {
        starjsx.push(<div key={j + 'half'} className="star halfstar"></div>)
      }
    }
    // 灰色の星をレンダリングします if (nullstar) {
      (k = 0; k < nullstar; k++ とします) {
        starjsx.push(<div key={k + 'null'} className="star nullstar"></div>)
      }
    }
    starjsx を返します。
  }
  与える() {
    <div className="star-score">{this.renderScore()}</div> を返します。
  }
}

デフォルトの StarScore をエクスポートします。

スタースコア.scss

.星スコア {
  。星 {
    幅: 10px;
    高さ: 10px;
    フロート: 左;
    背景サイズ: カバー;
  }

  .fullstar {
    背景画像: url('./img/fullstar.png');
  }

  .ハーフスター{
    背景画像: url('./img/halfstar.png');
  }

  .nu​​llstar {
    背景画像: url('./img/gray-star.png');
  }
}
'./Main.scss' をインポートします。
'react' から React をインポートします。

クラスMainはReact.Componentを拡張します。
  コンストラクタ(props) {
    スーパー(小道具);
    }
  }
  
  /**
   * クリックして評価してください */
  実行Eva(i) {
    this.setState({
      開始インデックス: i + 1
    });
  }
  /**
   * レンダリング評価の星 */
  レンダースター() {
    配列 = [] とする
    (i = 0; i < 5; i++ とします) {
      cls = i >= this.state.startIndex ? "スターアイテム" : "スターアイテム ライト" とします
      配列.push(
        <div onClick={() => this.doEva(i)} キー={i} クラス名={cls}></div>
      )
    }
    配列を返す
  }
  与える() {
    戻る (
      <div クラス名="コンテンツ">
        <div className="スターエリア">
            {this.renderStar()}
          </div>
      </div>
    );
  }
}

デフォルトのメインをエクスポートします。
。コンテンツ {
  高さ: 100%;
  .eva-コンテンツ{
    背景色: #fff;
    オーバーフロー: 非表示;
    マージン: px2rem(10px);
    上マージン: px2rem(74px);
  }
  .star-area {
    テキスト配置: 中央;
    上マージン: px2rem(30px);
  }
  .スターアイテム{
    幅: px2rem(32px);
    高さ: px2rem(32px);
    背景画像: url('./img/gray-star.png');
    背景サイズ: カバー;
    表示: インラインブロック;
    右マージン: px2rem(10px);

    &。ライト {
      背景画像: url('./img/light-star.png');
    }
  }
}

React 星評価コンポーネントの実装に関するこの記事はこれで終わりです。React 星評価の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • React は antd のアップロード コンポーネントを使用してファイル フォーム送信機能を実装します (完全なコード)
  • React 純粋関数コンポーネント setState がページ更新を更新しない問題の解決方法
  • Reactは動的ポップアップウィンドウコンポーネントを実装します
  • Reactコンポーネントをフルスクリーンにする方法

<<:  CMDコマンドを使用してMySqlデータベースを操作する方法の詳細な説明

>>:  MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)

推薦する

MySql マスタースレーブレプリケーションメカニズムの包括的な分析

目次マスタースレーブレプリケーションメカニズム非同期レプリケーション準同期レプリケーションマスタース...

MySql クイック挿入数千万の大規模データの例

データ分析の分野では、データベースは私たちの強力な助けとなります。クエリ時間を受け入れるだけでなく、...

MySQL が group by をサポートしない場合の解決策の概要

MySQL 5.7.x の最新バージョンをダウンロードしてインストールしました。デフォルトでは、on...

読み込み進捗バーのネイティブ JS 実装

この記事では、ネイティブ JS によって実装された動的読み込みプログレス バーの特殊効果を紹介します...

MySQL 8.0.20 インストール チュートリアル (画像とテキスト付き) (Windows 64 ビット)

1: mysql公式サイトからダウンロードhttps://dev.mysql.com/downlo...

Docker+Selenium Grid に基づく技術アプリケーションをテストするためのサンプル コード

Selenium Grid の紹介Selenium Grid のいくつかの新しい機能は、今後リリース...

スクロールバーを非表示にしながらもスクロール効果を維持する純粋な CSS (モバイルと PC)

携帯モバイル ページは Chrome および Safari とのみ互換性があればよいため、カスタム ...

MySqlを最適化するためにnot inを使用する方法

最近、プロジェクトで選択クエリを使用する際に、未使用の主キー ID を除外するために not in ...

JavaScript の Strict モードの詳細な説明

目次導入厳密モードの使用厳格モードの新機能例外を強制的にスローする変数の使用を簡素化する議論を単純化...

CSS コンテンツ属性を使用して、マウスホバープロンプト (ツールチップ) 効果を実現します。

なぜこのような効果を実現するのでしょうか。実は、この効果もタイトルプロンプトから派生したものですが、...

Linux サーバーに Python3 をインストールする 2 つの方法

最初の方法Alibaba Cloud および Baidu Cloud サーバーが利用可能です。 ! ...

Ubuntuでネットワークルーティングテーブルを表示する方法

Linux におけるルーティングとルーティング テーブルとは何ですか?ルーティングのプロセスとは、ネ...

EasyUEFI を使用して Windows 10 で USB ドライブなしで Ubuntu 18 をインストールする

1. BIOSを確認するまず、コンピュータの起動モードを確認します。win+R と入力し、msinf...

ブラウザ(IEシリーズ)を判別するための条件付きコメント

<!--[if IE 6]> IE6 のみが認識可能 <![endif]-->...