Soy muy nuevo en React y trato de implementar la función de Calificación en el código. ¿Alguien puede decir por qué obtengo TypeError: Object (...) no es un error de función cuando intento cambiar una propiedad de estado cuando se establece la propiedad onChange del componente de calificación .
Mi código
export default function Details(props) { const [movie_detail, set_movie_detail] = useState({ poster_url:"", artists:[], title:"", genres:[], duration:0, release_date:"", rating:0, storyline:"", id:"", wiki_url:"", trailer_url:"", censor_board_rating:"" }); async function data(){ const data = await fetch(props.baseUrl + "movies/"+props.match.params.id , { method: "GET", headers: { "Content-Type": "application/json", "Cache-Control": "no-cache" } }); const rawData = await data.json(); set_movie_detail(rawData); } const handleRatingChange = (value) =>{ console.log(value); setState({rating:value}); } useEffect(() => { data(); }, []); return ( <> <Header baseUrl={props.baseUrl} movieid={movie_detail.id} ></Header> ......... <div className="column3"> <Typography> <b>Rate this movie</b> </Typography> <Rating name="rating" value={movie_detail.rating/2} max={5} onChange={handleRatingChange} icon= { <StarBorderIcon style={{color:"black"}} /> } /> </div> </> ); }Debería usar el nombre correcto de la función que actualiza el estado. En este caso, set_movie_detail en lugar de setState . También debe fusionar la actualización con el estado anterior en lugar de sobrescribirlo.
Su función debe ser la siguiente:
const handleRatingChange = (value) => { console.log(value); set_movie_detail((prevState) => { ...prevState, rating: value }); }Debería usar set_movie_detail en lugar de setState mientras intenta actualizar el valor del estado.
const handleRatingChange = (value) =>{ console.log(value); set_movie_detail(prev=>{...prev,rating:value}); } set_movie_detail es la función que actualiza el estado de movie_detail . Aquí, estamos haciendo uso del operador de propagación ... para garantizar que solo se sobrescriban los atributos deseados ( rating aquí) y el resto de los valores permanezcan iguales.