【发布时间】:2020-12-11 12:02:55
【问题描述】:
我看过一些堆栈溢出的话题,但他们总是使用函数组件。我想知道如何在 TypeScript 中生成自定义 url,例如带有类组件的 http://localhost:3000/user/:userUid。 我试试这个:
Route 中的路径是 '/user/:userUID'
interface IURLInfo {
userUID: string
}
interface IProps extends RouteComponentProps<IURLInfo> {
}
interface IState {
}
class ShipsBoyBoatDashboard extends React.Component<IProps, IState> {
constructor(props: IProps) {
super(props)
}
componentDidMount() {
userIsLogged()
firebaseAuth().onAuthStateChanged(function(user) {
if(user) {
}
})
}
render() {
return(
<div className="ship-dashboard-container">
<p>{this.props.match.params.userUID}</p>
</div>
)
}
}
export default withRouter(ShipsBoyBoatDashboard)
但是 React 给我发回一个错误:TypeError: this.props.match is undefined
更新 这是我的 index.tsx:
import './index.css';
import App from './App';
import { Router } from 'react-router-dom';
import history from './utils/history';
ReactDOM.render(
<React.StrictMode>
<Router history={history}>
<App />
</Router>
</React.StrictMode>,
document.getElementById('root')
);
还有我的 App.tsx(即使是没用的)
import React from 'react';
import { Switch, Route } from 'react-router-dom';
import BaseLayout from './utils/baseLayout';
import routes from './routes';
export default class extends React.Component {
state = {
showNavbar: true
}
showNavbar = (showNavbar = true) => {
this.setState({ showNavbar });
}
render() {
return (
<BaseLayout showNavbar={this.state.showNavbar}>
<Switch>
{routes.map(route => (
<Route
exact
key={route.path}
path={route.path}
render={() => (
<route.component
showNavbar={() => this.showNavbar(route.showNavbar)}
/>
)}
/>
))}
</Switch>
</BaseLayout>
);
}
}
【问题讨论】:
-
您能否向我们提供您设置路由器和导入组件的完整代码?既然你上面的sn-p没有错。
-
好的@tmhao2005,完成了!
标签: reactjs typescript react-router react-typescript