【发布时间】:2020-09-15 18:38:01
【问题描述】:
我正在构建一个详细信息页面以显示我的 json 文件中选定对象的详细信息。 (点击缩略图将您带到视频页面,其中包含视频的详细信息)
到目前为止,我有 1) 数据文件 2) 您将在其中选择要查看更多信息的项目的主页 3) 显示信息的页面。
但是,我无法在详细信息页面上显示任何 json 数据。我尝试使用“匹配”方法,我使用了 Request.URL(),两者都不起作用,但我认为正确的方法是使用 useEffect 挂钩(如果我错了请纠正我)
这就是我目前所拥有的 useEffect 路线:
pages/FeaturedVideo.js:
import videos from '../../data/data.json'
const FeaturedVideo = () => {
const [videos, setVideos] = useState(null);
useEffect(() => {
let url = "/src/data/data.json";
fetch(url)
.then(res => res.json())
.then(videos => setVideos(videos))
}, []);
return(
<div>
<p>The video and it's details will go here </p>
{videos.id.map((video) =>{
<div key={video.id} {...videos}></div>
})}
</div>
)
}
export default FeaturedVideo;
我在上面尝试做的是使用 fetch 来调用 json 文件,就好像它是一个 API。然后从具体的video id映射出数据。
json文件的结构如下:
[
{
"id": 2,
"firstLogo": "Minecraft",
"thumbnail": "Thumbnail",
"available": "Unlock 12/6",
"sample": "https://www.youtube.com/watch?v=c_dG_HxHMVI"
},
{
"id": 3,
"firstLogo": "Batman",
"thumbnail": "Thumbnail",
"available": "Unlock 12/13",
"sample": "https://www.youtube.com/watch?v=c_dG_HxHMVI"
}
]
视频的 :id 通过以下方式包含在路径中:
<Router>
<Navbar/>
<Switch>
<Route path="/:videoID">
<FeaturedVideo/>
</Route>
<Route exact path="/">
<Home />
</Route>
</Switch>
<Footer />
</Router>
```re
【问题讨论】:
-
res 返回一个承诺,您必须使用 res.json() 将其解析为 json 参见文档:developer.mozilla.org/en-US/docs/Web/API/Fetch_API
-
看着这个developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch 我想你可能需要做的就是在你的 .then 语句中添加 .json() 到你的 res 中
-
那里还有一些东西...当您应该只映射对象的视频数组时,您正在映射 video.id 并且您没有返回
{videos.map((video) =>{return <div key={video.id} {...videos}></div>})} -
另外你的
'/'(主路径)应该在动态'/:videoId'之前出现
标签: javascript json reactjs react-hooks