reactjs - 如何使用带有打字稿的反应路由器dom导航到新页面
问题描述
我想在用户登录后导航到新页面。通常我会使用this.props.history.push("/some_other_page");
但是这给了我以下错误。
'Readonly & Readonly<{ children?: ReactNode; 类型上不存在属性 'history' }>
唱歌.tsx
interface Props {
classes: any
}
interface State {
email: string;
password: string;
}
class SignIn extends Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = {
email: "",
password: "",
};
}
...
handleLogin = async (event: any) => {
event.preventDefault();
const credentials: ILoginCredentials = {
email: this.state.email,
password: this.state.password
}
const res = await this.context.login(credentials);
if (res.status === 201) {
this.props.history.push("/dashboard");
}
}
...
}
SignIn.contextType = AuthContext;
export default withStyles(styles)(SignIn)
应用程序.tsx
import React, { Component, Fragment } from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';
import { AuthProvider, AuthContext } from "./contexts/AuthContext";
import SignIn from "./components/signin/SignIn";
import SignUp from "./components/signup/SignUp";
import Dashboard from "./components/dashboard/Dashboard";
import { createBrowserHistory } from 'history';
import './App.scss';
const theme = createMuiTheme({
palette: {
primary: {
main: '#212121',
contrastText: '#fff',
},
secondary: {
main: "#ffd600",
}
}
})
class App extends Component {
componentDidMount = async () => {
}
createRoutes = () => {
return (
<Fragment>
<Route exact path="/" component={SignIn} />
<Route exact path="/signup" component={SignUp} />
<Route exact path="/dashboard" component={Dashboard} />
</Fragment>
)
}
render() {
const history = createBrowserHistory();
return (
<div className="root">
<AuthProvider>
<MuiThemeProvider theme={theme}>
<BrowserRouter history={history}>
{this.createRoutes()}
</BrowserRouter>
</MuiThemeProvider>
</AuthProvider>
</div>
)
}
}
App.contextType = AuthContext;
export default App;
解决方案
我认为您正在寻找RouteComponentProps
@types/react-router-dom 库中定义的类型。没有这个 TypeScript 将无法解释history
道具的类型。
导入它并将传递给React.Component
类型的道具更改为Props & RouteComponentProps
.
import { RouteComponentProps } from "react-router-dom";
class SignIn extends Component<Props & RouteComponentProps, State> {
然后应该定义历史道具。
推荐阅读
- twilio - 找不到模块“@sendgrid/mail”
- ios - 在 Xcode 项目上实现第三方库时出错
- java - 我正在尝试更新数据库中的数据,但它不起作用
- javascript - 如何获取 Parse Json 数据 jQuery 每个?
- sql - 如何在 SQL 中连接阿拉伯字符串第一和英文第二?
- r - 按 data.table 中最高与第二高的比率过滤
- python - 将 CSV 文件转换为 pandas 的“平面文件”
- javascript - 如何在类中正确要求 Electron BrowserWindow
- batch-file - 来自 ANT 任务的 FTP 文件:Windows Server 到 Windows 10 远程 m/c
- ios - 在设置的时间之间触发本地通知,每天间隔。(例如上午 10 点到下午 6 点,每天间隔 5 分钟)