Использование реагирующего роутера с электроном - PullRequest
0 голосов
/ 06 июля 2018

Я нахожусь в процессе работы над проектом, использующим приложение create-реагировать на Electron и имею реакцию-маршрутизатор-дом. Я авторизую свой логин и надеюсь сразу после этого перенаправить их на домашнюю страницу, но обычный синтаксис перенаправления, похоже, не работает. Пожалуйста, посмотрите на мой код и посоветуйте.

index.js

import React from 'react';
import { render } from 'react-dom';
import App from './components/App';
import {
  BrowserRouter as Router,
  Route,
  Switch,
  Link,
  Redirect,
  withRouter
} from "react-router-dom";


let root = document.createElement('div');
root.id = "root";
document.body.appendChild( root );

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

App.js

import '../assets/css/App.css';
import React, {Component} from 'react';
import VideoContainer from './VideoContainer';
import Clock from './Clock';
import News from './News';
import Spotify from './Spotify';
import Login from './Login';
import {
  BrowserRouter as Router,
  Route,
  Switch,
  Link,
  Redirect,
  withRouter
} from "react-router-dom";


class App extends Component {
  render() {
    return (
      <Router>
        <Switch>
          <Route path="/" component={Login} />
          <Route path="/home" component={Clock} />
        <Route path="/news" component={News} />
      </Switch>
    </Router>
);
  }
}

export default withRouter(App);

Login.js

import '../assets/css/Login.css';
import React from 'react'
import PropTypes from 'prop-types'
const URL = 'http://localhost:3000/api/v1/sessions'
import {
  BrowserRouter as Router,
  Route,
  Switch,
  Link,
  Redirect,
  withRouter
} from "react-router-dom";

class Login extends React.Component {
  constructor(props) {
    super(props);
    this.logUser = this.logUser.bind(this);
  }
  addTokenToBrowser(token) {
    localStorage.setItem("id", token.id)
    localStorage.setItem("token", token.token)
  }

  logUser (e) {
    e.preventDefault()
    const data = {
      username: e.target.children[0].value,
      password: e.target.children[2].value
    }
    fetch(URL, {
      method: 'POST',
      body: JSON.stringify(data),
      headers:{
        'Content-Type': 'application/json'
      }
    }).then(res => res.json())
      .then(json => {
        if (json.status==="accepted"){
          localStorage.setItem("id", json.id)
          localStorage.setItem("token", json.token)
          this.props.history.push('/home')
        } else {
          alert('Please enter a valid email and password')
        }
      })
   }


  render () {
    console.log("My history", this.props);
  return (
    <div className="myInput">
      <form onSubmit={this.logUser} >
    <input placeholder="Username"></input>
    <br></br>
  <input placeholder="Password"></input>
    <br></br>
  <button type="submit">Login</button>
</form>
    </div>
  )
  }
}

export default Login;

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018
    <Route path="/" component={Login} />
    <Route path="/home" component={Clock} />
    <Route path="/news" component={News} />

Измените это на

    <Route path="/home" component={Clock} />
    <Route path="/news" component={News} />
    <Route path="/" component={Login} />

Подстановочный знак в конце.

0 голосов
/ 06 июля 2018

Чтобы использовать this.props.history.push, необходимо добавить withRouter в классе входа

export default withRouter(Login);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...