如何在Reactjs的新的react-router-dom中使用重定向

我正在使用最新版本的react-router模块,名为react-router-

dom,它已成为使用React开发Web应用程序时的默认模块。我想知道在POST请求后如何进行重定向。我一直在编写此代码,但是在请求之后,什么都没有发生。我在网上查看过,但是所有数据都是关于React

Router的先前版本的,而关于最后一个更新的则不是。

码:

import React, { PropTypes } from 'react';

import ReactDOM from 'react-dom';

import { BrowserRouter } from 'react-router-dom';

import { Redirect } from 'react-router'

import SignUpForm from '../../register/components/SignUpForm';

import styles from './PagesStyles.css';

import axios from 'axios';

import Footer from '../../shared/components/Footer';

class SignUpPage extends React.Component {

constructor(props) {

super(props);

this.state = {

errors: {},

client: {

userclient: '',

clientname: '',

clientbusinessname: '',

password: '',

confirmPassword: ''

}

};

this.processForm = this.processForm.bind(this);

this.changeClient = this.changeClient.bind(this);

}

changeClient(event) {

const field = event.target.name;

const client = this.state.client;

client[field] = event.target.value;

this.setState({

client

});

}

async processForm(event) {

event.preventDefault();

const userclient = this.state.client.userclient;

const clientname = this.state.client.clientname;

const clientbusinessname = this.state.client.clientbusinessname;

const password = this.state.client.password;

const confirmPassword = this.state.client.confirmPassword;

const formData = { userclient, clientname, clientbusinessname, password, confirmPassword };

axios.post('/signup', formData, { headers: {'Accept': 'application/json'} })

.then((response) => {

this.setState({

errors: {}

});

<Redirect to="/"/> // Here, nothings happens

}).catch((error) => {

const errors = error.response.data.errors ? error.response.data.errors : {};

errors.summary = error.response.data.message;

this.setState({

errors

});

});

}

render() {

return (

<div className={styles.section}>

<div className={styles.container}>

<img src={require('./images/lisa_principal_bg.png')} className={styles.fullImageBackground} />

<SignUpForm

onSubmit={this.processForm}

onChange={this.changeClient}

errors={this.state.errors}

client={this.state.client}

/>

<Footer />

</div>

</div>

);

}

}

export default SignUpPage;

回答:

您必须使用setState设置一个属性,该属性将呈现<Redirect>您的render()方法内部。

例如

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/>;

}


就是说,我建议您将API调用放在服务之内。然后,您可以使用该history对象以编程方式进行路由。这就是与redux集成的工作方式。

但是我想您有这样做的理由。

以上是 如何在Reactjs的新的react-router-dom中使用重定向 的全部内容, 来源链接: utcz.com/qa/426075.html

回到顶部