Создание компонента оценки звезд в React

ReactReactBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном задании мы исследуем, как создать компонент для оценки звезд в React. Компонент будет отображать набор звезд, с которыми пользователь может взаимодействовать, чтобы установить значение оценки. Мы будем использовать хук useState() для управления состоянием компонента и обрабатывать взаимодействия пользователя с помощью событий onMouseOver, onMouseLeave и onClick.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/StateManagementGroup(["State Management"]) react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/FundamentalsGroup -.-> react/event_handling("Handling Events") react/FundamentalsGroup -.-> react/conditional_render("Conditional Rendering") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") subgraph Lab Skills react/jsx -.-> lab-38362{{"Создание компонента оценки звезд в React"}} react/event_handling -.-> lab-38362{{"Создание компонента оценки звезд в React"}} react/conditional_render -.-> lab-38362{{"Создание компонента оценки звезд в React"}} react/hooks -.-> lab-38362{{"Создание компонента оценки звезд в React"}} react/use_state_reducer -.-> lab-38362{{"Создание компонента оценки звезд в React"}} end

Оценка звезд

В ВМ уже предоставлены index.html и script.js. В общем, вам нужно только добавить код в script.js и style.css.

Создайте компонент Star, который отображает каждую отдельную звезду с соответствующим внешним видом в зависимости от состояния родительского компонента. Затем определите компонент StarRating, который использует хук useState() для определения переменных состояния rating и selection с соответствующими начальными значениями.

В StarRating создайте метод с именем hoverOver, который обновляет selection в соответствии с предоставленным event. Если event не предоставлен или он равен null, сбросьте selection до 0. Используйте атрибут .data-star-id целевого элемента события, чтобы определить значение selection.

Далее создайте массив из 5 элементов с использованием Array.from() и создайте отдельные компоненты <Star> с использованием Array.prototype.map(). Обработайте события onMouseOver и onMouseLeave оборачивающего элемента с использованием hoverOver. Обработайте событие onClick с использованием setRating.

.star {
  color: #ff9933;
  cursor: pointer;
}
const Star = ({ marked, starId }) => {
  return (
    <span data-star-id={starId} className="star" role="button">
      {marked ? "\u2605" : "\u2606"}
    </span>
  );
};

const StarRating = ({ value }) => {
  const [rating, setRating] = React.useState(parseInt(value) || 0);
  const [selection, setSelection] = React.useState(0);

  const hoverOver = (event) => {
    let val = 0;
    if (event && event.target && event.target.getAttribute("data-star-id"))
      val = event.target.getAttribute("data-star-id");
    setSelection(val);
  };

  return (
    <div
      onMouseLeave={() => hoverOver(null)}
      onMouseOver={hoverOver}
      onClick={(e) =>
        setRating(e.target.getAttribute("data-star-id") || rating)
      }
    >
      {Array.from({ length: 5 }, (v, i) => (
        <Star
          starId={i + 1}
          key={`star_${i + 1}`}
          marked={selection ? selection >= i + 1 : rating >= i + 1}
        />
      ))}
    </div>
  );
};

Наконец, отобразите компонент StarRating с начальным значением 2, вызвав ReactDOM.createRoot(document.getElementById('root')).render(<StarRating value={2} />);.

Пожалуйста, нажмите кнопку 'Go Live' в нижнем правом углу, чтобы запустить веб-сервис на порту 8080. Затем вы можете обновить вкладку Web 8080, чтобы просмотреть веб-страницу.

Резюме

Поздравляем! Вы завершили лабораторную работу по оценке звезд. Вы можете практиковаться в других лабораторных работах в LabEx, чтобы улучшить свои навыки.