Как перенаправить на другую страницу, используя историю на React JS? - PullRequest
0 голосов
/ 17 января 2019

Я разработал страницу Singnup, используя Reactjs на внешнем интерфейсе и laravel на внутреннем интерфейсе, и я хочу, чтобы при нажатии на кнопку регистрации она была перенаправлена ​​на мою страницу входа в систему.

Компонент Моя регистрация:

handleSubmit =  event => {
    event.preventDefault();
    const users = {
      name:this.state.name,
      email:this.state.email,
      cin:this.state.cin,
      phoneNumber:this.state.phoneNumber,
      birthDate:this.birthDate,
      password:this.state.password
    }

    console.log(users)

      axios({
        method: 'post',
        url: 'http://172.16.234.24:8000/api/register',
        data: users,
        headers: {
          'Access-Control-Allow-Origin': '*',
          'Content-Type': 'application/json',
          'Accept': 'application/json',
        }
        })
        .then(function (response) {
          console.log(response);
          this.props.history.push('/login');
        })
        .catch(function (response) {
            console.log(response);
        });
  }

Мои маршруты:

import React from "react";
import { Route, Switch, } from "react-router-dom";
import Home from "./Home";
import NotFound from "./NotFound";
import Login from "./Login";
import Signup from "./Signup";

export default () =>
  <Switch>
    <Route path="/" exact component={Home} />
    <Route path="/login" exact component={Login} />
    <Route path="/signup" exact component={Signup}  />
    <Route component={NotFound} />

  </Switch>;

Мой индекс:

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router } from "react-router-dom";
import App from './App';
import * as serviceWorker from './serviceWorker';

ReactDOM.render(
<Router>
    <App />
</Router>
    , document.getElementById('root'));
serviceWorker.unregister();

Мой App.js:

import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import { Nav, Navbar, NavItem } from "react-bootstrap";
import { LinkContainer } from "react-router-bootstrap";
import Routes from "./Routes";
import './App.css';

class App extends Component {
  render() {
    return (
      <div className="App container">
        <Navbar fluid collapseOnSelect>
          <Navbar.Header>
            <Navbar.Brand>
              <Link to="/">Home</Link>
            </Navbar.Brand>
            <Navbar.Toggle />
          </Navbar.Header>
          <Navbar.Collapse>
            <Nav pullRight>
              <LinkContainer to="/signup">
                <NavItem>Signup</NavItem>
              </LinkContainer>
              <LinkContainer to="/login">
                <NavItem>Login</NavItem>
              </LinkContainer>
            </Nav>
          </Navbar.Collapse>
        </Navbar>
        <Routes />
      </div>
    );
  }}
export default App;

Моя версияact-router-dom 4.3.1, когда я запускаю, получаю:

typeerror: cannot read property 'props' of undefined 

Как я могу это исправить?

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Только что проверил - он отлично перенаправляет.

(внутри компонента «Регистрация»).

import React, { Component } from "react";
const axios = require('axios');

export default class Signup extends Component {

  constructor(props) {
    super(props); 

    this.state = {}
  }

  handleSubmit = event => {
      event.preventDefault();

        axios({
          method: 'get',
          headers: {
            "Content-type": "application/json"
          },
          url: 'https://jsonplaceholder.typicode.com/todos/1'
          }).then(response => {
            console.log(response); 
            this.props.history.push('/login');
          })
          .catch(response => {
              console.log(response);
          });
    }
  render() {
    return(
       <form onSubmit={this.handleSubmit}>
        <button
          type="submit">
          yo
        </button>
       </form>
     )
  }
}

Попробуйте использовать приведенный выше код-заполнитель, чтобы доказать, что перенаправление работает без сбоев, затем замените его на пользовательский API + POST. Примечание: вам может потребоваться stringify полезная нагрузка POST.

Мы не знаем, как выглядит ваш App.js, но ваш App.js также должен включать компонент <Router />.

0 голосов
/ 18 января 2019

попробуйте изолировать свойство перед вызовом axios:

  let { history } = this.props

  axios({
    method: 'post',
    url: 'http://172.16.234.24:8000/api/register',
    data: users,
    headers: {
      'Access-Control-Allow-Origin': '*',
      'Content-Type': 'application/json',
      'Accept': 'application/json',
    }
    })
    .then(function (response) {
      console.log(response);
      history.push('/login');
    })
    .catch(function (response) {
        console.log(response);
    });
0 голосов
/ 18 января 2019

Чтобы получить доступ к this.props.history.

, вы должны заключить компонент регистрации в withRouter компонент более высокого порядка.

Дополнительная информация в документах о реагирующих маршрутизаторах

...