Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 从操作重定向_Reactjs_Redirect_React Router - Fatal编程技术网

Reactjs 从操作重定向

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

我正在尝试实现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 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.}
)