【发布时间】:2022-01-21 16:30:21
【问题描述】:
我正在做一个 React.js 项目。我正在从Star Wars API 中检索 dat,在屏幕上呈现电影列表,现在我正试图通过 react-router-dom 将每部电影路由到自己的页面。不幸的是,我无法让它工作。当我尝试动态路由时它崩溃了。
REZA 回答后更新
这是 App.js:
import './App.css';
import { Route, Routes } from "react-router-dom";
import Home from './components/Home';
import ItemContainer from './components/ItemContainer';
import Navbar from './components/Navbar';
function App() {
return (
<>
<Navbar />
<Routes>
<Route exact path='/' element={<Home />} />
<Route exact path="/:movieId" element={<ItemContainer />} />
</Routes>
</>
);
}
export default App;
这是 ItemContainer:
import { useEffect, useState } from "react";
import MovieDetail from "../MovieDetail";
import { useParams } from "react-router-dom";
const ShowMovie = (movieId) => {
const [result, setResult] = useState([]);
const fetchData = async () => {
const res = await fetch("https://www.swapi.tech/api/films/");
const json = await res.json();
setResult(json.result);
}
useEffect(() => {
fetchData();
}, []);
return new Promise((res) =>
res(result.find((value) => value.properties.title === movieId)))
}
const ItemContainer = () => {
const [films, setFilms] = useState([]);
const { movieId } = useParams([]);
console.log('params movieId container', movieId)
useEffect(() => {
ShowMovie(movieId).then((value) => {
setFilms(value.properties.title)
})
}, [movieId])
return (
<MovieDetail key={films.properties.title} films={films} />
);
}
export default ItemContainer;
console.log 没有给出任何信息。
更新
另外,这是sandbox中的全部代码。
【问题讨论】:
-
films最初是一个数组,但您正在访问它,就像它是一个对象一样,即films.properties.title。它是哪一个?设置组件key时,您像对象一样访问,但将整个films状态作为道具传递。 -
谢谢@DrewReese 我解决了这个问题。但即便如此,它也会呈现一个空白页面。即使我将 ItemContainer 的返回更改为
或
标签: javascript reactjs routes react-router react-router-dom