reactjs - React useState 不会触发子组件的重新渲染
问题描述
我似乎无法弄清楚为什么当电影状态更改时我的 MovieDetailCard 组件不会重新渲染。我正在传递电影对象。当我更新状态时,日志在 useEffect 中正确输出,但 MovieDetailsCard 从未收到更新的对象。
const MovieDetails = () => {
const [movie, setMovie] = useState({});
const { id } = useParams();
const { poster } = useParams();
useEffect(() => {
const fetchMovie = async () => {
const response = await fetch(
`http://www.randyconnolly.com/funwebdev/3rd/api/movie/movies.php?id=${id}`
);
const data = await response.json();
setMovie({ ...data });
};
fetchMovie();
}, []);
useEffect(() => {
console.log(movie); // this successfully outputs when movie updates
}, [movie]);
return (
<div className="row">
<div className="col s12 m6">
<MovieDetailsCard poster={poster} movie={movie} /> // this does not update
</div>
<div className="col s12 m6">
<CastCrewCard />
</div>
</div>
);
};
下面是 MovieDeatailsCard。在 useEffect 中,console.log(movie) 总是返回 null。
const MovieDetailsCard = ({ poster, movie }) => {
useEffect(() => {
console.log("in details");
console.log(movie);
}, []);
return (
<div className="card">
<div className="card-content">
<div className="row">
<div className="col s6">
<span className="card-title">Movie Title</span>
</div>
<div className="col s6 favouriteButton">
<FavouriteButton className="waves-effect waves-light btn">
<i className="material-icons">favorite</i>
</FavouriteButton>
</div>
</div>
<div className="row">
<div className="col s12 m6">
<img src={`https://image.tmdb.org/t/p/w342/${poster}.jpg`} alt="" />
</div>
<div className="col s12 m6">
<p>{movie.title}</p>
</div>
</div>
</div>
</div>
);
};
export default MovieDetailsCard;
解决方案
谢谢大家的意见。现在这似乎解决了。在我通过 setData(data) 设置数据之前,但是当我更改为 setData({...data}) 时,它起作用了!
推荐阅读
- javascript - getElementsByClassName 和 appendChild 没有按预期工作
- laravel - 如何多次调用 Artisan::call(...) ?(迁移然后播种)
- c# - 错过了异步和等待任务
- android - 如何模拟android tap,非常快
- android - Recyclerview 并非所有数据都显示
- java - 在对象中转换 Gson 数组
- python - 为什么两组的差异有时会以正确的顺序给出结果,而有时在 python 中却没有?
- asp.net - 以安全的方式将用户名和密码传递给服务器
- python - 如何在 python 中循环这个函数?
- php - 在作业中调用 null 时的成员函数 notify()