如何使用 React 的 Router v4 history.push()
How to use React's Router v4 history.push()
注意:我对 React 和 Meteor 还很陌生,所以在回答我的问题时请非常具体。
我正在尝试使用 meteor 和 React 制作短信应用程序,但是,我使用的教程使用的是 React v3,我想知道如何在 v4 中做同样的事情,即使用 browserHistory.push() 或 browserHistory.replace() 将用户转到另一个页面。到目前为止,我正在做一个页面,他们可以在其中将自己的名字设置为他们想要的任何名称,然后将他们链接到聊天页面。我知道网上有很多文章和文档,但它们都是相当复杂的示例。如果可以的话,你能告诉我将某人重定向到另一个页面的最基本方法吗?
SetName.js:
import React from "react";
import { BrowserRouter } from 'react-router-dom'
export default class SetName extends React.Component{
validateName(e){
e.preventDefault();
let name = this.refs.name.value;
if(name){
console.log(name);
}
this.props.history.push('/asd')
}
render(){
return(
<div>
<form onSubmit={this.validateName.bind(this)}>
<h1>Enter a Name</h1>
<input ref="name" type="text"/>
<button>Go to Chat</button>
</form>
</div>
)
}
}
main.js
import React from "react";
import ReactDOM from "react-dom";
import {Meteor} from "meteor/meteor";
import {Tracker} from "meteor/tracker";
import { BrowserRouter, Route, Switch } from 'react-router-dom'
import {Texts} from "./../imports/api/Text";
import App from "./../imports/ui/App";
import Name from "./../imports/ui/Name";
import NotFound from "./../imports/ui/NotFound";
import SetName from "./../imports/ui/SetName";
Meteor.startup(() => {
Tracker.autorun(() => {
let texts = Texts.find().fetch();
const routes = (
<BrowserRouter>
<Switch>
<App path="/chat" texts={texts}/>
<SetName path="/setName" />
<Route component={NotFound}/>
</Switch>
</BrowserRouter>
);
ReactDOM.render(routes, document.getElementById("app"));
});
});
如果您已经在使用 React Router 4,那么您只需执行以下操作即可在您的组件中获取路由器历史记录。确保你在路由器中渲染你的组件,否则你必须在不同的 way.You 上进行渲染,可以通过打印 this.props 来检查
在你的组件中。如果它有历史,则执行以下操作,否则执行下面的下一个逻辑。
this.props.history.push('your routing location').
如果您的组件不在路由器内,请执行以下操作
import { withRouter } from 'react-router';
... your react component
export default withRouter(yourcomponent);
通过这种方式,它将路由器历史记录作为道具注入到您的组件中。
注意:我对 React 和 Meteor 还很陌生,所以在回答我的问题时请非常具体。
我正在尝试使用 meteor 和 React 制作短信应用程序,但是,我使用的教程使用的是 React v3,我想知道如何在 v4 中做同样的事情,即使用 browserHistory.push() 或 browserHistory.replace() 将用户转到另一个页面。到目前为止,我正在做一个页面,他们可以在其中将自己的名字设置为他们想要的任何名称,然后将他们链接到聊天页面。我知道网上有很多文章和文档,但它们都是相当复杂的示例。如果可以的话,你能告诉我将某人重定向到另一个页面的最基本方法吗?
SetName.js:
import React from "react";
import { BrowserRouter } from 'react-router-dom'
export default class SetName extends React.Component{
validateName(e){
e.preventDefault();
let name = this.refs.name.value;
if(name){
console.log(name);
}
this.props.history.push('/asd')
}
render(){
return(
<div>
<form onSubmit={this.validateName.bind(this)}>
<h1>Enter a Name</h1>
<input ref="name" type="text"/>
<button>Go to Chat</button>
</form>
</div>
)
}
}
main.js
import React from "react";
import ReactDOM from "react-dom";
import {Meteor} from "meteor/meteor";
import {Tracker} from "meteor/tracker";
import { BrowserRouter, Route, Switch } from 'react-router-dom'
import {Texts} from "./../imports/api/Text";
import App from "./../imports/ui/App";
import Name from "./../imports/ui/Name";
import NotFound from "./../imports/ui/NotFound";
import SetName from "./../imports/ui/SetName";
Meteor.startup(() => {
Tracker.autorun(() => {
let texts = Texts.find().fetch();
const routes = (
<BrowserRouter>
<Switch>
<App path="/chat" texts={texts}/>
<SetName path="/setName" />
<Route component={NotFound}/>
</Switch>
</BrowserRouter>
);
ReactDOM.render(routes, document.getElementById("app"));
});
});
如果您已经在使用 React Router 4,那么您只需执行以下操作即可在您的组件中获取路由器历史记录。确保你在路由器中渲染你的组件,否则你必须在不同的 way.You 上进行渲染,可以通过打印 this.props 来检查 在你的组件中。如果它有历史,则执行以下操作,否则执行下面的下一个逻辑。
this.props.history.push('your routing location').
如果您的组件不在路由器内,请执行以下操作
import { withRouter } from 'react-router';
... your react component
export default withRouter(yourcomponent);
通过这种方式,它将路由器历史记录作为道具注入到您的组件中。