reactjs - 使用 react-router-dom 和 useParams 提取参数 id
问题描述
我正在尝试从 url 中提取参数并使用 useParams 将其保存为 redux 变量。所以我想要的是以下内容:
- 我正在通过 url 打开带有餐厅 ID 的餐厅资料。
- 我正在路由到 getRestaurantID 组件并提取 id 并调用 this.props.setRestaurantId(id) 并将 id 存储为 redux 变量。
我的问题是函数 this.props.setRestaurantId(id) 没有定义,我真的不知道为什么。你有什么建议吗?
这是我的代码:
import React from 'react';
import {BrowserRouter as Router, Switch, Route, Link, useRouteMatch, useParams} from "react-router-dom";
import HomeComponent from '../components/pages/home';
import AboutComponent from '../components/pages/about';
import RestaurantComponent from '../components/pages/restaurantProfile/restaurant';
import RestaurantList from "../components/pages/restaurantList";
import GetRestaurantId from "./getRestarauntID";
function router(){
return (
<Router>
<Switch>
<Route path="/about">
<About/>
</Route>
<Route path="/restaurant/:id" children={<GetRestaurantId/>}/>
<Route path="/restaurants">
<Restaurants/>
</Route>
<Route path="/impressum">
<Impressum/>
</Route>
<Route path="/">
<Home/>
</Route>
</Switch>
</Router>
);
}
function Home() {
return <HomeComponent/>
}
function About() {
return <AboutComponent/>;
}
function Restaurants(){
return <RestaurantList/>;
}
function Impressum(){
return <h2>Impressum</h2>
}
export default router;
import React from 'react';
import {BrowserRouter as Router, Switch, Route, Link, useRouteMatch, useParams} from "react-router-dom";
import {connect} from "react-redux";
import Restaurant from "../components/pages/restaurantProfile/restaurant";
function GetId() {
const { id } = useParams();
console.log(id);
this.props.setRestaurantId(id);
return(
<div>
<Restaurant/>
</div>
)
}
const mapDispatchToProps=(dispatch)=>{
return {
setRestaurantId: (data) => dispatch({type:'SET_RESTAURANT_ID', payload:data}),
}
};
export default connect(null,mapDispatchToProps)(GetId);
解决方案
您不能this.props
在功能组件中使用。
您可以直接从函数参数访问道具。
function GetId({setRestaurantId}) {
const { id } = useParams();
console.log(id);
setRestaurantId(id);
return(
<div>
<Restaurant/>
</div>
)
}
const mapDispatchToProps=(dispatch)=>{
return {
setRestaurantId: (data) => dispatch({type:'SET_RESTAURANT_ID', payload:data}),
}
};
export default connect(null,mapDispatchToProps)(GetId);
推荐阅读
- sql - 正则表达式过滤带点和不带点的数字
- python - Flask-SQLAlchemy ORM/GeoAlchemy2 结果到字典,最终是 JSON
- css - ReactJs - 对齐导航栏项目
- javascript - 如何显示 href 的 react-intl 翻译结果?
- javascript - 在 JavaScript 中对数组进行排序
- scala - SBT插件——编译前执行自定义任务
- postgresql - 删除 RDS Postgres DB 时,是否清除连接的 Redis Elasticache?
- rest - NetBeans 生成的 REST 服务适用于 XML 请求,但不适用于 JSON
- javascript - 使用 window.hasOwnProperty()
- javascript - javascript :<< indexOf >>property 为 null 或未定义