Как мне отобразить звезду для каждого 1, который находится в рейтинге?реагировать

#reactjs

#reactjs

Вопрос:

Да, так что в основном мне нужно отобразить звезду (некоторый элемент i) в соответствии с рейтингом рецепта (5 звезд, поэтому, если оценка равна 3, мне нужно сгенерировать 3 звезды). Большое спасибо, ценю любые советы (мне нужно отобразить звезды там, где сейчас находится функция map в jsx, хотя это не решение)

Details.js

 import { useParams } from 'react-router-dom';
import './Details.css';
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import Image from './vitaminDfood-1132105308-770x553.jpg';
import {Link} from 'react-router-dom'
import ReactStars from 'react-rating-stars-component'

function Details() {
  const [details, setDetails] = useState([]);
  const { recipeId } = useParams();
  useEffect(() => {
    axios
      .get(`https://cookbook.ack.ee/api/v1/recipes/${recipeId}`)
      .then((res) => setDetails(res.data));
    console.log(details);
  });

  const ratingChanged = (newRating) => {
    var rate={
      score:newRating
    }
    
    axios.post(`https://cookbook.ack.ee/api/v1/recipes/${recipeId}/ratings`,rate)
    .then((res) => {
      console.log(res.data); 
      
    })
    console.log(newRating);
  };

  return (
    <>
      <div className="details">
        <div className="food-photo">
          <img src={Image} alt="" />
      <Link to="/"> <i class="fas fa-arrow-left arrow"></i></Link>   
          <h1>{details.name}</h1>
        </div>
        <div className="star-line">
          {details.score.map((star,index)=>(
            <i class="fas fa-star"></i>
          ))}
          <h1 className="duration">{details.duration}</h1>
        </div>
        <p className="info">{details.info}</p>
        <h1 className="ingredience">Ingredience</h1>

        <div className="ing">{details.ingredients}</div>

        <h1 className="ingredience">Příprava</h1>
        <p className="description">{details.description}</p>
      </div>
    <div className="stars">

      <ReactStars
      classNames="star"
      size={48}
      onChange={ratingChanged}
      />
      </div>
    </>
  );
}

export default Details;
 

Ответ №1:

Вы можете сгенерировать массив с требуемым количеством элементов и сопоставить его:

 ...

{new Array(details.score).fill(null).map(() => (
          <i class="fas fa-star"/>
        ))}
...