要件は、製品の評価データを渡すことであり、ページには対応する星の数が表示されます。 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. データに基づいて対応する星の数を計算する // 完全な星の数 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'); } .nullstar { 背景画像: 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CMDコマンドを使用してMySqlデータベースを操作する方法の詳細な説明
>>: MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)
この記事では、主に html + css を使用してサラウンド リフレクション ローディング エフェ...
目次1. マージインターフェース1.1 非関数メンバー1.2 関数メンバー序文:今日お話ししたいのは...
システムヘルプを表示help contents mysql> ヘルプコンテンツ; ヘルプ カテ...
ボタン (input, button) を記述すると、IE では次のようになります。単語数が増えると...
2つのケース: 1. 索引あり 2. 索引なし前提条件:方法: コマンドラインを使用してシミュレー...
目次一方向データフローの説明Vue2.x の使用法親コンポーネントに変更を通知するイベントのフォーム...
この記事では、主に、div の水平レイアウトの両側の配置を実装する 3 つの方法を紹介し、それらを共...
事前に言っておく気まぐれですが、MySQL の order by sorting にどのようなルール...
1. HTML タグを使用してテーブルを作成します。コードをコピーコードは次のとおりです。 <...
目次1. はじめに2. 原則III. 実践3.1 インデックスプッシュダウンを使用しない3.2 イン...
nginx が proxy_pass を設定する場合、末尾に "/" がある U...
当銀行のMGRは年末に開始されます。公式文書を読んだり、毎日テストを受けたりしなければなりません。毎...
構造(位置)擬似クラスセレクタ(CSS3) :first-child : 指定されたセレクタは、親要...
目次1. スコープはさまざまな方法で表現されます2. 変動昇進と非昇進の違い3. 一時的なデッドゾー...
今日、VMware を使用してマシンに新しい仮想マシンをインストールしていたところ、次のように「この...