Reactjs 从操作重定向
我正在尝试实现react路由器版本4。请查找我现在拥有的最低代码,如下所示:Reactjs 从操作重定向,reactjs,redirect,react-router,Reactjs,Redirect,React Router,我正在尝试实现react路由器版本4。请查找我现在拥有的最低代码,如下所示: import React from 'react'; import { BrowserRouter, Route, Link } from 'react-router-dom'; import { Menu, MenuItem } from '@progress/kendo-layout-react-wrapper'; import { Switch } from 'react-router-dom'; export
import React from 'react';
import { BrowserRouter, Route, Link } from 'react-router-dom';
import { Menu, MenuItem } from '@progress/kendo-layout-react-wrapper';
import { Switch } from 'react-router-dom';
export default () => (
<BrowserRouter>
<div>
<div className="col-xs-12 col-sm-6 col-md-12">
<header className="App-header">
<h1 className="App-title">TestUsers</h1>
</header>
<Menu>
<MenuItem>
<Link to="/users">Users</Link>
</MenuItem>
<MenuItem>
Shelves
</MenuItem>
<MenuItem>
Products
</MenuItem>
</Menu>
</div>
<Switch>
<Route exact path="/users" component={Users} />
<Route exact path="/users/add" component={Users} />
<Route exact path="/users/:id" component={Users} />
</Switch>
</div>
</BrowserRouter>
)
我一直在努力实现同样的目标。谁能给我指一下正确的方向吗
谢谢您可以从您的行动中回报承诺:
export function addUser(objData) {
return function (dispatch) {
return axios.post(
'http://localhost:4000/api/v1/users',
{
'name': objData.name,
'email': objData.email
}
)
.then((response) => {
dispatch({ 'type': ADD_USER, 'payload': true });
// TODO: programmatically redirect using react-router v4
})
.catch((error) => {
console.log(error);
});
}
}
然后在组件中:
componentDidMount(){
this.props.addUser(objData).then(() => {
this.props.history.push('/somwhere')
})
}
在分派操作之后使用
this.props.history.push('/some/path')
我还建议您检查response.status是否等于200,您可以使用历史记录模块 创建history.js文件
//history.js
import createHistory from 'history/createHashHistory'
export default createHistory()
用新的历史记录更新路由器。你需要使用路由器而不是浏览器路由器
import React from 'react';
import { Router, Route, Link } from 'react-router-dom';
import { Menu, MenuItem } from '@progress/kendo-layout-react-wrapper';
import { Switch } from 'react-router-dom';
import history from './history';
export default () => (
<Router history={history}>
...
</Router>
);
在react router 4中,引入了
组件,该组件在render()
方法中返回,以实现所需的功能。重定向组件也从react router dom
so导入:import{BrowserRouter,Route,Link,redirect}从'react router dom'导入;
类MyComponent扩展了React.Component{
状态={
重定向:false
}
handleSubmit(){
axios.post(/**/)
.then(()=>this.setState({redirect:true}));
}
渲染(){
const{redirect}=this.state;
如果(重定向){
返回;
}
返回;
}
您可以使用回调
export function addUser(objData, onSuccess, onFail) {
return function (dispatch) {
return axios.post(
'http://localhost:4000/api/v1/users',
{
'name': objData.name,
'email': objData.email
}
)
.then((response) => {
dispatch({ 'type': ADD_USER, 'payload': true });
onSuccess()
})
.catch((error) => {
//you can handle error on your component
onFail(error);
});
}
}
然后像这样在组件上调用addUser
addUser(
objData,
() => this.props.history.push('/your-user-list-component'),
() => {// handle the error here.}
)
class MyComponent extends React.Component {
state = {
redirect: false
}
handleSubmit () {
axios.post(/**/)
.then(() => this.setState({ redirect: true }));
}
render () {
const { redirect } = this.state;
if (redirect) {
return <Redirect to='/somewhere'/>;
}
return <RenderYourForm/>;
}
export function addUser(objData, onSuccess, onFail) {
return function (dispatch) {
return axios.post(
'http://localhost:4000/api/v1/users',
{
'name': objData.name,
'email': objData.email
}
)
.then((response) => {
dispatch({ 'type': ADD_USER, 'payload': true });
onSuccess()
})
.catch((error) => {
//you can handle error on your component
onFail(error);
});
}
}
addUser(
objData,
() => this.props.history.push('/your-user-list-component'),
() => {// handle the error here.}
)