![](/img/trans.png)
[英]React-Router-Dom v5.2 , unable to pass props to a child component from prop recieved by parent
[英]React router dom passing data from parent component to child router component does not pass the props.match
父组件 App.js 的内容:-
import React, { useEffect, useState } from "react";
import NavBar from "./components/NavBar";
import Signup from "./pages/Signup";
import Home from "./pages/Home";
import Book from "./pages/Book";
function App() {
const [user, setUser] = useState();
useEffect(() => {
const token = "Bearer " + sessionStorage.getItem("token");
if (token) {
axios
.get(process.env.REACT_APP_API_URL + "user/self", {
headers: {
Authorization: token,
"Content-Type": "application/json",
},
})
.then((res) => setUser(res.data));
}
}, []);
return (
<div className="container-fluid">
<NavBar user={user} />
<Route exact path="/" component={Home} />
<Route path="/signup" component={Signup} />
<Route exact path="/book/:id" component={() => <Book user={user} />} />
</div>
);
}
export default App;
对于路线:-
<Route exact path="/book/:id" component={() => <Book user={user} />} />
当我将组件值从 component={Book} 设置为 component={() => 我得到一个错误:-
TypeError:无法读取未定义的属性“参数”
那是因为我在 Book 组件中使用了“props.match.params.id”。
如何将带有 props.match 的用户 state 传递给他的 Book 组件?
这就是你使用组件道具的方式
<Route exact path="/book/:id" component={Book} />
考虑使用render
prop 而不是component
prop,如下所示:
<Route exact path="/book/:id" render={(routeProps) => <Book user={user} {...routeProps} />} />
component
道具不是 function。 使用render
而不是component
道具。
render
道具是一个 function 路由器道具 object 作为参数传递给它。 您可以将这些路由器道具传递给您的组件。
<Route exact path="/book/:id" render={(props) => <Book user={user} {...props} />} />
有关render
道具的详细信息,请参阅反应路由器文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.