React+koa+mysql+Bootstrap登录注册案例

发布于:2022-12-16 ⋅ 阅读:(219) ⋅ 点赞:(0)

1.创建一个React项目create-react-app app-master

2.安装依赖:react,react-router-dom,react-redux,react-scripts

3.创建路由文件

import React, { Component } from 'react'

import { HashRouter as Router,Route,Switch } from 'react-router-dom'

import App from '../pages/App'

import Register from '../pages/Register/Register'

import Login from '../pages/Login/Login'

import Nav from '../components/Nav/Nav'

export default class index extends Component {

  render() {

    return (

        <Router>

            <Nav/>

            <Switch>

                <Route exact path="/" component={App}></Route>

                <Route path="/register" component={Register}></Route>

                <Route path="/login" component={Login}></Route>

            </Switch>

        </Router>

    )

  }

}

在入口文件index.js中引入路由

 4.创建页面

在public文件下index.html文件下引入Bootstrap的CDN地址:

<link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

页面文件结构如下:

 登录页源码:(注册页同理)

import React, { Component } from "react";

import api from "../../api/index"

export default class ogin extends Component {

  constructor(){

    super();

    this.state={

      username:'',

      password:''

    }

  }

  onSubmit=(e)=>{

    e.preventDefault();

    console.log(this.state);

     api.login({

      username:this.state.username,

      password:this.state.password

     }).then(res=>{

      console.log(res);

   

     }).catch(error=>{

      console.log(error);

     })

  }

  changeHandle=(e)=>{

    //console.log(e.target.value);

    this.setState({

      [e.target.name]:e.target.value

    })

  }

  render() {

    const {username,password}=this.state;

    return (

      <div className="row">

        <div className="col-md-3"></div>

        <div className="col-md-6">

          <form onSubmit={this.onSubmit}>

            <div className="form-group">

              <label htmlFor="exampleInputEmail1">用户名</label>

              <input

                type="username"

                className="form-control"

                placeholder="username"

                name="username"

                value={username}

                onChange={this.changeHandle}

              />

            </div>

            <div className="form-group">

              <label htmlFor="exampleInputPassword1">密码</label>

              <input

                type="password"

                className="form-control"

                placeholder="Password"

                name="password"

                value={password}

                onChange={this.changeHandle}

              />

            </div>

            <div className="form-group">

              <button className="btn btn-primary btn-lg">登录</button>

            </div>

          </form>

        </div>

        <div className="col-md-3"></div>

      </div>

    );

  }

}

5.封装axios请求

文件结构如下,先创建request.js

request.js源码:

import axios from "axios";

const instance=axios.create({

    baseURL:"http://localhost:8000",

    timeout:5000

})

//请求拦截器

instance.interceptors.request.use((config)=>{

    return config;

});

//响应拦截器

instance.interceptors.response.use((res)=>{

    return res.data;

},(error)=>{

    console.log("err"+error);

});

export default instance;

index.js文件二次封装具体请求,源码如下:(注:后端已经处理过跨域,前端无需处理)

import axios from "./request"

const base={

    register:"/user/register",

    login:"/user/login"

}

//(1)跨域,后台解决

      const api={

    register(params){

        return axios.post(base.register,params)

    },

    login(params){

        return axios.post(base.login,params)

    }

}

export default api;

 登录成功:

 该案例只是为了了解react流程,打通数据。

本文含有隐藏内容,请 开通VIP 后查看