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 が最も小さいデータのみを保持します)

推薦する

サラウンドリフレクションロード効果を実現するHTML+CSS

この記事では、主に html + css を使用してサラウンド リフレクション ローディング エフェ...

TSで最も一般的な宣言マージ(インターフェースマージ)

目次1. マージインターフェース1.1 非関数メンバー1.2 関数メンバー序文:今日お話ししたいのは...

MySQL 学習ノート ヘルプ ドキュメント

システムヘルプを表示help contents mysql> ヘルプコンテンツ; ヘルプ カテ...

IEではボタンが両側に伸びる

ボタン (input, button) を記述すると、IE では次のようになります。単語数が増えると...

Mysql トランザクションで Update を実行するとテーブルがロックされますか?

2つのケース: 1. 索引あり 2. 索引なし前提条件:方法: コマンドラインを使用してシミュレー...

Vue3 親子コンポーネントパラメータ転送における sync 修飾子の使用法の詳細な説明

目次一方向データフローの説明Vue2.x の使用法親コンポーネントに変更を通知するイベントのフォーム...

div の水平レイアウトを両側に揃える 3 つの方法

この記事では、主に、div の水平レイアウトの両側の配置を実装する 3 つの方法を紹介し、それらを共...

MySQL Order By 複数フィールドのソートルールのコード例

事前に言っておく気まぐれですが、MySQL の order by sorting にどのようなルール...

DOM操作テーブルの例(DOMはテーブルを作成します)

1. HTML タグを使用してテーブルを作成します。コードをコピーコードは次のとおりです。 <...

MySQL Index Pushdown (ICP) とは何かを理解するための記事

目次1. はじめに2. 原則III. 実践3.1 インデックスプッシュダウンを使用しない3.2 イン...

MySQL 5.7 MGR シングルマスター決定マスターノード方式の詳細説明

当銀行のMGRは年末に開始されます。公式文書を読んだり、毎日テストを受けたりしなければなりません。毎...

CSS3の新しいセレクタの例

構造(位置)擬似クラスセレクタ(CSS3) :first-child : 指定されたセレクタは、親要...

JavaScript における var と let の違い

目次1. スコープはさまざまな方法で表現されます2. 変動昇進と非昇進の違い3. 一時的なデッドゾー...