亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

React星星評分組件的實現(xiàn)

 更新時間:2021年06月15日 10:48:25   作者:淘淘是只狗  
評分插件在購物的應用中經(jīng)常可以看得到,但是用著別人的總是沒有自己寫的順手,本文就使用React實現(xiàn)星星評分組件,感興趣的可以了解一下

實現(xiàn)的需求為傳入對商品的評分數(shù)據(jù),頁面顯示對應的星星個數(shù)。

1. 準備三張對應不同評分的星星圖片

在這里插入圖片描述
在這里插入圖片描述在這里插入圖片描述

2. 期望實現(xiàn)的效果

這樣的

在這里插入圖片描述

調(diào)用

<StarScore score={data.wm_poi_score}/>

3. 對傳入的數(shù)據(jù)進行處理

我們需要得到評分的整數(shù)和小數(shù)部分

let wm_poi_score = this.props.score || '';
let score = wm_poi_score.toString();
let scoreArray = score.split('.');

如果傳入 4.7 ,那么得到的 scoreArray 就是['4', '7']

4. 根據(jù)數(shù)據(jù)計算對應的星星個數(shù)

// 滿星個數(shù)
let fullstar = parseInt(scoreArray[0]);
// 半星個數(shù)
let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0;
// 灰色星個數(shù)
let nullstar = 5 - fullstar - halfstar;

5. 根據(jù)星星個數(shù),渲染組件

let starjsx = [];
// 渲染滿星
for (let i = 0; i < fullstar; i++) {
  starjsx.push(<div key={i + 'full'} className="star fullstar"></div>)
}
// 渲染半星
if (halfstar) {
  for (let j = 0; j < halfstar; j++) {
    starjsx.push(<div key={j + 'half'} className="star halfstar"></div>)
  }
}
// 渲染灰色星
if (nullstar) {
  for (let k = 0; k < nullstar; k++) {
    starjsx.push(<div key={k + 'null'} className="star nullstar"></div>)
  }
}

ok,我們想要的效果就實現(xiàn)啦

6. 手動評分

在這里插入圖片描述

頁面初次展示時,渲染 5 個灰色的星星。為每一個星星添加一個 click 事件。當點擊之時,獲取該星星所對應的下標 index,為其添加高亮的樣式。

<div className="star-area">
  {this.renderStar()}
</div>
doEva(i) {
  this.setState({
    startIndex: i + 1
  });
}

renderStar() {
  let array = []
  for (let i = 0; i < 5; i++) {
    let cls = i >= this.state.startIndex ? "star-item" : "star-item light"
    array.push(
      <div onClick={() => this.doEva(i)} key={i} className={cls}></div>
    )
  }
  return array
}

完整代碼

import React from 'react';
import './StarScore.scss';

// 渲染5顆星得分方法
class StarScore extends React.Component {
  renderScore() {
    let wm_poi_score = this.props.score || '';
    let score = wm_poi_score.toString();
    let scoreArray = score.split('.');
    // 滿星個數(shù)
    let fullstar = parseInt(scoreArray[0]);
    // 半星個數(shù)
    let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0;
    // 灰色星個數(shù)
    let nullstar = 5 - fullstar - halfstar;
    let starjsx = [];

    // 渲染滿星
    for (let i = 0; i < fullstar; i++) {
      starjsx.push(<div key={i + 'full'} className="star fullstar"></div>)
    }
    // 渲染半星
    if (halfstar) {
      for (let j = 0; j < halfstar; j++) {
        starjsx.push(<div key={j + 'half'} className="star halfstar"></div>)
      }
    }
    // 渲染灰色星
    if (nullstar) {
      for (let k = 0; k < nullstar; k++) {
        starjsx.push(<div key={k + 'null'} className="star nullstar"></div>)
      }
    }
    return starjsx;
  }
  render() {
    return <div className="star-score">{this.renderScore()}</div>;
  }
}

export default StarScore;

StarScore.scss

.star-score {
  .star {
    width: 10px;
    height: 10px;
    float: left;
    background-size: cover;
  }

  .fullstar {
    background-image: url('./img/fullstar.png');
  }

  .halfstar {
    background-image: url('./img/halfstar.png');
  }

  .nullstar {
    background-image: url('./img/gray-star.png');
  }
}
import './Main.scss';
import React from 'react';

class Main extends React.Component {
  constructor(props) {
    super(props);
    }
  }
  
  /**
   * 點擊評分
   */
  doEva(i) {
    this.setState({
      startIndex: i + 1
    });
  }
  /**
   * 渲染評分用的星
   */
  renderStar() {
    let array = []
    for (let i = 0; i < 5; i++) {
      let cls = i >= this.state.startIndex ? "star-item" : "star-item light"
      array.push(
        <div onClick={() => this.doEva(i)} key={i} className={cls}></div>
      )
    }
    return array
  }
  render() {
    return (
      <div className="content">
        <div className="star-area">
            {this.renderStar()}
          </div>
      </div>
    );
  }
}

export default Main;
.content {
  height: 100%;
  .eva-content {
    background-color: #fff;
    overflow: hidden;
    margin: px2rem(10px);
    margin-top: px2rem(74px);
  }
  .star-area {
    text-align: center;
    margin-top: px2rem(30px);
  }
  .star-item {
    width: px2rem(32px);
    height: px2rem(32px);
    background-image: url('./img/gray-star.png');
    background-size: cover;
    display: inline-block;
    margin-right: px2rem(10px);

    &.light {
      background-image: url('./img/light-star.png');
    }
  }
}

到此這篇關于React星星評分組件的實現(xiàn)的文章就介紹到這了,更多相關React星星評分內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • react router4+redux實現(xiàn)路由權限控制的方法

    react router4+redux實現(xiàn)路由權限控制的方法

    本篇文章主要介紹了react router4+redux實現(xiàn)路由權限控制的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • React Native之prop-types進行屬性確認詳解

    React Native之prop-types進行屬性確認詳解

    本篇文章主要介紹了React Native之prop-types進行屬性確認詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • React項目中不需要jQuery原因分析

    React項目中不需要jQuery原因分析

    在Web開發(fā)的早期,jQuery是一個革命性的庫,它極大地簡化了DOM操作、事件處理、動畫制作以及Ajax請求等任務,React的出現(xiàn),jQuery在新項目中的必要性開始受到質疑,本文將探討為什么在React應用中不需要jQuery,感興趣的朋友可以參考下
    2024-02-02
  • React聲明組件的方法總結

    React聲明組件的方法總結

    這篇文章主要給大家介紹了react聲明組件有哪幾種方法,各有什么不同,文章通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-11-11
  • React中的axios模塊及使用方法

    React中的axios模塊及使用方法

    axios 是一個基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中,本文給大家分享React中axios模塊的使用方法,感興趣的朋友一起看看吧
    2022-03-03
  • react-redux及redux狀態(tài)管理工具使用詳解

    react-redux及redux狀態(tài)管理工具使用詳解

    Redux是為javascript應用程序提供一個狀態(tài)管理工具集中的管理react中多個組件的狀態(tài)redux是專門作狀態(tài)管理的js庫(不是react插件庫可以用在其他js框架中例如vue,但是基本用在react中),這篇文章主要介紹了react-redux及redux狀態(tài)管理工具使用詳解,需要的朋友可以參考下
    2023-01-01
  • React報錯之Parameter event implicitly has an any type解決

    React報錯之Parameter event implicitly has a

    這篇文章主要為大家介紹了React報錯之Parameter event implicitly has an any type,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • react native與webview通信的示例代碼

    react native與webview通信的示例代碼

    本篇文章主要介紹了react native與webview通信的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 阿里低代碼框架lowcode-engine自定義設置器詳解

    阿里低代碼框架lowcode-engine自定義設置器詳解

    這篇文章主要為大家介紹了阿里低代碼框架lowcode-engine自定義設置器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • React中的Diff算法你了解嗎

    React中的Diff算法你了解嗎

    這篇文章主要為大家詳細介紹了React的Diff算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論