javascript - 无法在反应中读取属性“推送”
问题描述
我正在尝试获得一个将在一秒钟后出现的组件。组件本身只有 H1。我使用路由器,所以在我看来最正确的解决方案是使用 history.push 但它对我不起作用,我做错了什么?
import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import {withRouter} from 'react-router-dom'
import './App.css';
import Hello from './comp/Hello';
class App extends Component {
render() {
return (
<Router>
<div className="App">
</div>
<Route path="/hello" component={Hello} />
</Router>
);
}
componentWillMount() {
this.hello()
}
hello(){
setTimeout(() => {
this.props.history.push('/hello')
}, 1000);
}
}
export default App;
===========================the Component========================
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<div className="App">
<h1>hi</h1>
</div>
);
}
}
export default App;
解决方案
对于接收history
道具的组件,您需要两件事:
Router
必须位于顶层,尤其是对Route
、Link
和的所有调用withRouter
需要 prop 的组件
history
必须由 a 渲染Route
,例如,<Route component={ComponentThatNeedsHistoryProp} ...>
或者用withRouter
.
在您的情况下,您似乎不能依赖要传递的路由道具,因此我们需要使用withRouter
. 它应该看起来像这样(未显示导入):
// App.js
class App = () => (
<div className="App">
<Router>
<Hello />
</Router>
</div>
)
// Hello.js
class Hello extends Component {
render() {
return <h1>hi</h1>
}
componentWillMount() {
this.hello()
}
hello(){
setTimeout(() => {
this.props.history.push('/hello')
}, 1000);
}
}
export default withRouter(Hello);
推荐阅读
- button - 单选按钮复制后删除时如何使id出现
- r - 为什么我的可视化与我的数据不匹配?我如何让它匹配?
- c++ - const map 和 const 元素 map 的区别
- python - 如何从扭曲的协议方法(例如 ConnectionMade)修改变量
- javascript - Angular Rxjs 如何使用行为主题进行分页
- python - 一个上下文管理器而不是两个用于打开文件?
- python - 如何在 selenium Python 中进行分页?
- c# - 从随机列表中推断网格中每个点的高度
- ios - 我可以在 IOS 中获取下载的 M4A、MP3 文件吗?
- asp.net - ASP.NET MVC5 路由/渲染缓慢