【发布时间】:2021-08-13 21:17:42
【问题描述】:
这些天我开始学习 React.js。
我想知道我是否可以使用useEffect钩子和函数组件而不是componentDidMount()和类组件,例如,当用户直接访问“http://localhost:3000/movie-detail”而不点击在“电影”链接上。
我尝试了一些方法,我认为,在这种情况下,我必须使用componentDidMount() 和类组件,因为必须单击“电影”链接才能将props 传递给“详细信息”组件。
如果你知道如何处理这个问题,可以告诉我吗?
这是我的“电影”组件,其中有一个路径名道具。
function Movie({id, year, title, summary, poster, genres}){
return (
<Link
to={{
pathname:"/movie-detail",
state: {
year,
title,
summary,
poster,
genres
}
}}
>
<div className="movie">
...
</div>
</Link>
)
}
这是我的“应用程序”组件,其中将路径名道具传递给“详细信息”组件。
function App() {
return (
<BrowserRouter>
<Navigation />
<Switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/movie-detail" component={Detail} />
</Switch>
</BrowserRouter>
)
}
这是我的“详细信息”组件,其中获取表单 Route 组件的道具。
function Detail({location, history}) {
useEffect(() => {
if(location === undefined) {
history.push("/");
}
}, [ location, history])
const { title } = location.state;
return (
<h1>Title: {title}</h1>
)
}
我得到如下错误代码。
TypeError: Cannot destructure property 'title' of 'location.state' as it is undefined.
【问题讨论】:
-
我想我也许可以用“useHistrory”或“useLocation”来处理它。
标签: javascript reactjs use-effect