【发布时间】:2020-05-23 00:31:42
【问题描述】:
我对使用 React 和 JSX 非常陌生,不确定如何在我的 react 应用程序中动态设置链接。我正在尝试使其在登录页面上,如果用户成功输入了他们的用户名和密码,它会重定向到主页,如果它们不匹配,它将重新加载登录页面。此登录表单对 Flask API 进行 fetch 调用,该 API 在用户名和密码与我的数据库正确匹配时返回成功。将登录页面链接到注册页面的按钮目前可以使用,但是使用类似的逻辑不适用于登录按钮
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import { BrowserRouter } from 'react-router-dom';
import * as serviceWorker from './serviceWorker';
import 'bootstrap/dist/css/bootstrap.css';
import 'semantic-ui-css/semantic.min.css'
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById('root')
);
App.js
import React, {useEffect, useState, Component} from 'react';
import './App.css';
import {NewUserInfo} from './components/NewUserInfo';
import {Login} from './components/Login';
import {Register} from './components/Register';
import {Container} from "semantic-ui-react";
import {BrowserRouter, Route, Switch} from 'react-router-dom';
import Homepage from './components/Homepage';
import Tabs from './components/Tabs';
//import Header from './components/Header';
import Journal from './components/Journal';
import Survey from './components/Survey';
import Profile from './components/Profile';
function App(){
return (
<div>
<Switch>
<Route exact path="/" component={Login}/>
<Route path="/register" component={Register}/>
<Route path="/homepage" component={Homepage}/>
<Route path="/profile" component={Profile}/>
</Switch>
</div>
);
}
export default App;
Login.js
import React, { Component, useState } from "react";
import {Button, Form, FormGroup, Label, Input} from 'reactstrap';
export const Login = () => {
const [email_or_username, setName] = useState('');
const [password, setPassword] = useState('');
const [is_contributor, setContributor] = useState(false);
var ref = "/";
return (
<div>
<Form className="login-form">
<h1>
<div className="text-right">
<Button
href="/register"
className=" btn-dark text-right">
sign up
</Button>
</div>
<span className="font-weight-bold">Mindify</span>
</h1>
<FormGroup>
<Label>Username or Email</Label>
<h2></h2>
<Input
value={email_or_username}
placeholder = "Username or Email"
onChange={e => setName(e.target.value)}/>
</FormGroup>
<FormGroup>
<label>Password</label>
<h2></h2>
<Input
value={password}
placeholder = "Password"
onChange={e => setPassword(e.target.value)}/>
</FormGroup>
<FormGroup>
<div className="text-center">
<Input
type="checkbox"
value={is_contributor}
onChange={e => setContributor(e.target.checked)}/>
Contributor
</div>
</FormGroup>
<Button onClick={async () =>{
const login = {email_or_username, password, is_contributor};
console.log(JSON.stringify(login));
const response = await fetch('http://127.0.0.1:5000/api/login', {
method: 'POST',
headers:{
'Content-Type': 'application/json'
},
body: JSON.stringify(login)
})
.then(response => {
console.log(response.status);
if (response.status === 201) {
console.log("Successful Login");
ref="/homepage";
console.log(ref);
//redirect to home page
}
else if (response.status === 204) {
console.log("Invalid Username or Password or Incorrect Permissions");
ref="/";
console.log(ref);
// reload login page
}
})
.catch(error => console.log(error))
}}
href={ref}
className="btn-lg btn-dark btn-block">
Log in</Button>
</Form>
</div>);
}
【问题讨论】:
标签: javascript reactjs react-native react-router-dom