reactjs - 使用带有 Electron 的 react 路由器

标签 reactjs react-router electron

我正在使用 Electron 上的 create-react-app 开发一个项目,并拥有 react-router-dom。我正在授权我的用户登录并希望在之后立即将它们重定向到主页,但通常的重定向语法似乎不起作用。请查看我的代码并提出建议。

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;

最佳答案

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

最后的通配符。

关于reactjs - 使用带有 Electron 的 react 路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51202888/

相关文章:

reactjs - 如何使用 webpack 压缩设置 Content-Encoding 元数据 header ?

reactjs - Auth 保护的路由 React Router V4 - 传递 Props

javascript - 在表单提交时添加查询参数 - React router 4

javascript - 在 Electron 中,如何从完整文件名上传文件

node.js - 如何使用node.js下载maven依赖项?

json - 使用 React DropZone 将 CSV 转换为 JSON 客户端

javascript - Redux 表单字段级验证在 Edge 中不起作用

javascript - ReactJS - 一个 child 如何找到它的 parent ?

reactjs - enzyme 和 react 路由器: How to shallow render a component with useHistory

css - 如何从 electron(使用 vue)打印页面,在 windows 和 mac 中具有相同的结果