发布于 2026-01-06 1 阅读
0

创建自定义 React 星级评分组件 DEV 的全球展示与分享挑战赛,由 Mux 呈现:展示你的项目!

创建一个自定义 React 星级评分组件

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

在本教程中,我们将构建一个自定义的 React 星级评分组件。这种组件允许用户通过单击鼠标来给事物或内容打分,评分范围为 1 到 5 星。

以下是组件完成后的外观和功能:

替代文字

让我们开始使用Create React App来搭建一个应用程序:

npx creat-react-app star-rating

然后在该/src目录中创建一个名为 `.` 的组件文件StarRating.js。我们将从一个简单的组件开始测试设置,然后再构建完整的功能:



import React, { useState } from "react";

const StarRating = () => {  
  return (<p>Hello World</p>);
};

export default StarRating;


Enter fullscreen mode Exit fullscreen mode

接下来,将文件内容替换App.js为组件要加载的内容:



import StarRating from "./StarRating";
import "./App.css";

const App = () => {
  return (
    <div className="App">
      <StarRating />
    </div>
  );
};

export default App;


Enter fullscreen mode Exit fullscreen mode

运行该npm start命令并测试组件是否已加载。

现在回到StarRating.js文件,我们首先需要做的是让组件输出 5 个星号,我们通过遍历数组来实现这一点:



const StarRating = () => {
  return (
    <div className="star-rating">
      {[...Array(5)].map((star) => {        
        return (         
          <span className="star">&#9733;</span>        
        );
      })}
    </div>
  );
};


Enter fullscreen mode Exit fullscreen mode

&#9733;这是星形图标的 HTML 实体代码,当然你也可以使用 Font Awesome 之类的图标库。接下来,我们需要添加点击时设置星级评分的功能。为此,我们将星形图标包裹在一个 <div> 元素中,<button>并为其添加一个onClick()事件:



const StarRating = () => {
  const [rating, setRating] = useState(0);
  return (
    <div className="star-rating">
      {[...Array(5)].map((star, index) => {
        index += 1;
        return (
          <button
            type="button"
            key={index}
            className={index <= rating ? "on" : "off"}
            onClick={() => setRating(index)}
          >
            <span className="star">&#9733;</span>
          </button>
        );
      })}
    </div>
  );
};


Enter fullscreen mode Exit fullscreen mode

我们使用状态钩子来存储点击的星形的值(索引)。根据所选的评分,会添加“on”或“off”类,这样我们就可以设置图标样式,从而直观地呈现所选评分。

以下是我们要添加到 App.css 文件中的 CSS 代码:



button {
  background-color: transparent;
  border: none;
  outline: none;
  cursor: pointer;
}
.on {
  color: #000;
}
.off {
  color: #ccc;
}


Enter fullscreen mode Exit fullscreen mode

通过 CSS 设置,我们已经有了一个可以正常工作的组件,点击后会显示选定的星级评分。为了增加一些交互性,我们还将实现一个悬停效果,以指示点击后将要选择的评分:



const StarRating = () => {
  const [rating, setRating] = useState(0);
  const [hover, setHover] = useState(0);
  return (
    <div className="star-rating">
      {[...Array(5)].map((star, index) => {
        index += 1;
        return (
          <button
            type="button"
            key={index}
            className={index <= (hover || rating) ? "on" : "off"}
            onClick={() => setRating(index)}
            onMouseEnter={() => setHover(index)}
            onMouseLeave={() => setHover(rating)}
          >
            <span className="star">&#9733;</span>
          </button>
        );
      })}
    </div>
  );
};


Enter fullscreen mode Exit fullscreen mode

这就是一个无需任何额外依赖项或框架的自定义星级评分组件。和往常一样,该项目的源代码可以在GitHub上找到。感谢阅读 :)

文章来源:https://dev.to/michaelburrows/create-a-custom-react-star- rating-component-5o6