for*_*orJ 13 javascript reactjs react-router
我已经在其他线程中尝试了所有建议的方法,但它仍然无法正常工作,这就是我发布问题的原因.
所以我history.js看起来像这样
import { createBrowserHistory } from 'history';
export default createBrowserHistory;
Run Code Online (Sandbox Code Playgroud)
我的 index.js
render((
<Router history={history}>
<div>
<Route component={App}/>
</div>
</Router>
), document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)
Home.js 看起来像这样
class Home extends Component {
handleSubmit(e) {
e.preventDefault();
let teacherName = e.target.elements[0].value;
let teacherTopic = e.target.elements[1].value;
let path = `/featured/${teacherName}/${teacherTopic}`;
history.push(path);
}
render() {
return (
<div className="main-content home">
<hr />
<h3>Featured Teachers</h3>
<form onSubmit={this.handleSubmit}>
<input type="text" placeholder="Name"/>
<input type="text" placeholder="Topic"/>
<button type="submit"> Submit </button>
</form>
</div>
);
}
}
export default Home;
Run Code Online (Sandbox Code Playgroud)
Home.js实际上是在app.js中路由的,它在index.js中路由.
问题是我无法在任何地方访问历史对象.
我尝试过的方法如下
1)this.context.history.push(path)在home.js中 - 无法访问undefined的上下文
2)this.props.history.push(path)在home.js中 - 无法访问undefined的道具
3)browserHistory.push(path)在index.js中 - 现在已弃用
4)上面的方式 - _history2.default.push不是一个函数
我上面尝试的所有方法都不起作用.第二个是最奇怪的,因为我应该能够根据文档https://reacttraining.com/react-router/web/api/Route/Route-render-methods将历史对象作为道具随处访问
我知道以前的v2或v3访问历史记录的方式也已弃用.
那么知道如何在React Router v4中访问历史对象的人能回答这个问题吗?谢谢.
Tho*_*lls 28
在我看来你可能错过了一个withRouter连接.这将使历史道具可用于此组件
...
import { withRouter } from 'react-router'
class Home extends Component {
functionMethod() {
const { history: { push } } = this.props;
doStuff();
push('/location');
}
...
}
export default withRouter(Home);
Run Code Online (Sandbox Code Playgroud)
https://reacttraining.com/react-router/web/api/withRouter
使用钩子:useHistory
import { useHistory } from "react-router-dom";
function HomeButton() {
let history = useHistory();
function handleClick() {
history.push("/home");
}
return (
<button type="button" onClick={handleClick}>
Go home
</button>
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16612 次 |
| 最近记录: |