reactjs - 我通过链接(react-router-dom)将道具传递给功能组件,但它说状态是“未定义”
问题描述
我需要将id传递给不同的组件。
import { Link } from "react-router-dom";
const Option = () => {
return (
<section className="section">
<Link
to={{
pathname: "/person",
state: { id: "12345" },
}}
>
<button class="button is-primary">Click Me</button>
</Link>
</section>
);
};
export default Option;
我正在访问id的组件
const Person = (props) => {
let data = useLocation();
console.log(data);
return (
<section className="section has-text-centered mt-4">
<h1>Hello</h1>
</section>
);
};
export default Person;
但我的状态为undefined。如何访问我传入的id ?
解决方案
您需要在路线组件分配的地方分配传递道具而不是路线导航
或者,如果您真的喜欢在 onclick 上传递道具。使用useHistory
钩子然后传递状态参数
props
您可以通过子组件接收状态值
更新
您应该将渲染参数传递给组件,例如
<Route path="/person" render={Person} />
等于
<Route path="/person" render={(params)=><Person {...params}/>} />
然后只有你可以收到子参数的道具值
import { Link,useHistory } from "react-router-dom";
const Option = () => {
const history = useHistory();
function nav(){
history.push({
pathname: '/path',
state: { // location state
update: true,
},
});
}
return (
<section className="section">
<button class="button is-primary" onClick={nav}>Click Me</button>
</section>
);
};
export default Option;
推荐阅读
- python - 远程图像上传执行与开发服务器不同
- azure - 启动 Cosmos DB 模拟器时出错
- sql - SQL将多行合并为一列并从ID中获取名称
- poco - POCO 许可证已过期
- twilio - Twilio 可编程聊天 sendMessage 返回值
- php - Laravel Eloquent getting related content with multiple columns
- react-native - how can i change the options of my drawerNavigator with React Native when user is logged
- angular - Angular Clear Cache On update
- bash - bash:管道空输入的默认输出
- ios - Failure to determine screen point of hittable tableViewCell