最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React星星評(píng)分組件的實(shí)現(xiàn)

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

實(shí)現(xiàn)的需求為傳入對(duì)商品的評(píng)分?jǐn)?shù)據(jù),頁(yè)面顯示對(duì)應(yīng)的星星個(gè)數(shù)。

1. 準(zhǔn)備三張對(duì)應(yīng)不同評(píng)分的星星圖片

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

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

這樣的

在這里插入圖片描述

調(diào)用

<StarScore score={data.wm_poi_score}/>

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

我們需要得到評(píng)分的整數(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ù)計(jì)算對(duì)應(yīng)的星星個(gè)數(shù)

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

5. 根據(jù)星星個(gè)數(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,我們想要的效果就實(shí)現(xiàn)啦

6. 手動(dòng)評(píng)分

在這里插入圖片描述

頁(yè)面初次展示時(shí),渲染 5 個(gè)灰色的星星。為每一個(gè)星星添加一個(gè) click 事件。當(dāng)點(diǎn)擊之時(shí),獲取該星星所對(duì)應(yīng)的下標(biāo) 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('.');
    // 滿星個(gè)數(shù)
    let fullstar = parseInt(scoreArray[0]);
    // 半星個(gè)數(shù)
    let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0;
    // 灰色星個(gè)數(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);
    }
  }
  
  /**
   * 點(diǎn)擊評(píng)分
   */
  doEva(i) {
    this.setState({
      startIndex: i + 1
    });
  }
  /**
   * 渲染評(píng)分用的星
   */
  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');
    }
  }
}

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

相關(guān)文章

  • 如何使用React構(gòu)建一個(gè)擲骰子的小游戲

    如何使用React構(gòu)建一個(gè)擲骰子的小游戲

    這篇文章主要介紹了如何使用React構(gòu)建一個(gè)擲骰子的小游戲,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • React中使用Redux Toolkit狀態(tài)管理的示例詳解

    React中使用Redux Toolkit狀態(tài)管理的示例詳解

    在現(xiàn)代 React 應(yīng)用程序中,狀態(tài)管理是一個(gè)至關(guān)重要的部分,使用 Redux Toolkit 可以簡(jiǎn)化 Redux 的配置和管理,本文將通過(guò)三個(gè)文件的示例,詳細(xì)講解如何使用 Redux Toolkit 創(chuàng)建和管理一個(gè)簡(jiǎn)單的計(jì)數(shù)器狀態(tài),需要的朋友可以參考下
    2024-11-11
  • React?Native系列之Recyclerlistview使用詳解

    React?Native系列之Recyclerlistview使用詳解

    這篇文章主要為大家介紹了React?Native系列之Recyclerlistview使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • react實(shí)現(xiàn)原生下拉刷新

    react實(shí)現(xiàn)原生下拉刷新

    這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)原生下拉刷新,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • react中如何使用定義數(shù)據(jù)并監(jiān)聽其值

    react中如何使用定義數(shù)據(jù)并監(jiān)聽其值

    這篇文章主要介紹了react中如何使用定義數(shù)據(jù)并監(jiān)聽其值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 搭建React?Native熱更新平臺(tái)的詳細(xì)過(guò)程

    搭建React?Native熱更新平臺(tái)的詳細(xì)過(guò)程

    這篇文章主要介紹了搭建React?Native熱更新平臺(tái),要實(shí)現(xiàn)?React?Native?熱更新功能,有四種思路?Code?Push、Pushy、Expo?和自研,感興趣的朋友一起通過(guò)本文學(xué)習(xí)吧
    2022-05-05
  • React?forwardRef?用法案例分析

    React?forwardRef?用法案例分析

    這篇文章主要介紹了React forwardRef用法,forwardRef允許你的組件使用ref將一個(gè)DOM節(jié)點(diǎn)暴露給父組件,本文結(jié)合案例分析給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • React狀態(tài)管理器Rematch的使用詳解

    React狀態(tài)管理器Rematch的使用詳解

    rematch是對(duì)redux的二次封裝,簡(jiǎn)化了redux是使用,極大的提高了開發(fā)體驗(yàn),這篇文章主要介紹了React狀態(tài)管理器Rematch的使用,需要的朋友可以參考下
    2022-09-09
  • 關(guān)于React16.0的componentDidCatch方法解讀

    關(guān)于React16.0的componentDidCatch方法解讀

    這篇文章主要介紹了關(guān)于React16.0的componentDidCatch方法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 詳解webpack + react + react-router 如何實(shí)現(xiàn)懶加載

    詳解webpack + react + react-router 如何實(shí)現(xiàn)懶加載

    這篇文章主要介紹了詳解webpack + react + react-router 如何實(shí)現(xiàn)懶加載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-11-11

最新評(píng)論

阳原县| 平南县| 抚宁县| 临夏县| 津市市| 积石山| 开原市| 东辽县| 霍林郭勒市| 富蕴县| 鹿泉市| 读书| 聂荣县| 秦安县| 沙河市| 体育| 翁源县| 日照市| 灌南县| 长岛县| 晋城| 中阳县| 定兴县| 正阳县| 建湖县| 福海县| 龙南县| 徐闻县| 吉木萨尔县| 长阳| 邹平县| 灵武市| 南陵县| 古蔺县| 三江| 邵武市| 新宁县| 治多县| 秦皇岛市| 合山市| 区。|