【发布时间】:2022-08-19 00:25:14
【问题描述】:
我正在尝试使用 useEffect 从状态进行简单的渲染,但出现空白,尽管 useEffect 正在检索数据并且两次! (虽然我只要求它渲染一次并且它不会被更新)..
Json 数据文件(提取)\'moviedetails.json\':
[
{
\"Movie\": {
\"RegionId\": 1,
\"TitleId\": 1,
\"Title\": \"13 Hours: The Secret Soldiers of Benghazi\",
\"TitleYear\": 2016,
\"Summary\": \"On Sept. 11, 2012, Islamic militants attack the U.S. Consulate in Benghazi, Libya, killing Ambassador J blah blah.\"
},
\"Scenes\": [
{
\"SceneId\": 2,
\"LocationSiteId\": 108,
\"LocationPlaceName\": \"Valletta\",
\"LocationSiteName\": \"Liesse Il-Belt\",
\"Latitude\": 35.89615,
\"Longitude\": 14.5136
},
{
\"SceneId\": 474,
\"LocationSiteId\": 108,
\"LocationPlaceName\": \"Valletta\",
\"LocationSiteName\": \"Liesse Il-Belt\",
\"Latitude\": 35.89615,
\"Longitude\": 14.5136
},
etc etc...
}
]
和.js文件...
import { Container } from \"react-bootstrap\";
import Row from \'react-bootstrap/Row\';
import Col from \'react-bootstrap/Col\';
import { Link, useParams } from \"react-router-dom\";
import { useEffect, useState } from \"react\";
import Movies from \'../data/moviedetails.json\'
const MovieDetails = () => {
const { id } = useParams()
const [movie, setMovie] = useState([])
useEffect(() => {
if (loadingMovie) {
return
}
const filteredMovieDetails = Movies.filter(moviedetail => moviedetail.Movie.TitleId == id)
setMovie ( filteredMovieDetails )
console.log ( filteredMovieDetails) // gets array but runs twice!
},[]);// Only needs to run once
return (
// RETURNS BLANK!
<Container>
<Row>
<h1>{movie.Title}</h1>
</Row>
<Row>
<article>
{movie.Summary}
</article>
</Row>
</Container>
)
}
export default MovieDetails;
在这个阶段我只是想展示电影。标题和电影。总结 尽管状态 \'movies\' 具有正确的数据,但没有返回任何内容。我认为这与 \'async\' 有关,并且 useEffect 在 return 语句之后运行?
-
你能把它更新为一个可运行的minimal reproducible example 来演示吗?乍一看,您似乎只是在什么是数组和什么是单个对象之间混淆了自己。在名称中一致地使用复数形式很重要。
标签: reactjs use-effect