react專案實戰二 登入註冊頁面的完成
1、首先是新建專案,並引入相關依賴
新建專案參考部落格
在開始之前,推薦先學習一下redux的簡單使用
相關庫:
npm install redux --save npm run eject 展示出所有配置 npm install express --save npm install -g nodemon //每次修改之後不需要手動重啟server.js npm install mongoose --save npm install antd-mobile --save npm install babel-plugin-import --save 按需載入 npm install redux --save npm install redux-thunk --sava 處理非同步操作 npm install react-redux --save 自動連線react和redux npm install babel-plugin-transform-decorators-legacy --save-dev 裝飾器外掛 在package.json中配置 "plugins": [ "transform-decorators-legacy" ] 報錯: 最後使用 "devDependencies": { "@babel/plugin-proposal-decorators": "^7.1.0" }, "plugins": [ [ "@babel/plugin-proposal-decorators", { "legacy": true } ] ] npm install react-router-dom --save npm install axios --save 前後端聯調 配置:"proxy":"http://localhost:9093" 處理跨域請求 npm install cookie-parser --save 使用cookie
2、檔案目錄結構
檔案目錄結構
│ .gitignore │ list.txt │ package-lock.json │ package.json │ README.md │ ├─config ├─public ├─scripts ├─server │ model.js │ server.js │ user.js └─src │ config.js │ index.css │ index.js │ reducer.js │ ├─component │ ├─authroute │ │ authroute.js │ │ │ └─logo │ job.png │ logo.css │ logo.js │ ├─container │ ├─login │ │ login.js │ │ │ └─register │ register.js │ └─redux user.redux.js
各個資料夾的介紹
server
資料夾是為了與資料庫連線,我們此部分這裡只做一個簡單的配置,在後續的文章中我會繼續介紹,
compoent
存放公共元件
container
redux
存放各個物件模組的對應元件狀態變化的處理
index.js
專案主架構,元件的組合
reducer.js
所有的reducer在這個裡邊合併
config.js
專案的一些相關配置
3、開始編碼
首先我們來構建登入註冊的頁面
如圖所示,登入註冊頁面都分為上下兩個部分,其中上部是logo,下部分是輸入框,
所以我們可以抽離出來三個元件
- logo
- login
- register
logo
import React from 'react' import logoImg from './job.png' import './logo.css' class Logo extends React.Component{ render(){ return ( <div className="logo-container"> <img className="logo-img" src={logoImg} alt=""/> </div> ) } } export default Logo
login
import React from 'react'
import Logo from '../../component/logo/logo.js'
import {List,InputItem,WingBlank,WhiteSpace,Button} from 'antd-mobile'
class Login extends React.Component{
constructor(props){
super(props);
//繫結this時間,如果不繫結,無法傳遞this
this.register = this.register.bind(this);
}
register(){
console.log(this.props);
//跳轉到註冊頁面
this.props.history.push('/register')
}
render(){
return (
<div>
<Logo></Logo>
<h2>我是登入頁</h2>
<WingBlank>
<List>
<InputItem>使用者名稱</InputItem>
<InputItem type="password">密碼</InputItem>
</List>
<WhiteSpace/>
<Button type="primary">登入</Button>
<WhiteSpace/>
<Button onClick={this.register} type="primary">註冊</Button>
</WingBlank>
</div>
)
}
}
export default Login
register
import React from 'react'
import Logo from '../../component/logo/logo'
import {List,InputItem,WingBlank,WhiteSpace,Button,Radio} from 'antd-mobile'
import {connect} from 'react-redux'
import {register} from '../../redux/user.redux'
import '../../index.css'
@connect(
state => state.user,
{register}
)
class Register extends React.Component{
constructor(props){
super(props);
this.state = {
user:'',
pwd:'',
repeatpwd:'',
type:'genius',
}
this.handleRegister = this.handleRegister.bind(this)
}
//呼叫redux/user.redux中的register方法,判斷是否可以註冊
handleRegister(){
this.props.register(this.state)
// console.log(this.state);
}
//監控輸入框的變化,及時更新state中的值
handleChange(key,val){
this.setState({
[key]:val
})
}
render(){
const RadioItem = Radio.RadioItem
return (
<div>
<Logo></Logo>
<WingBlank>
<List>
{this.props.msg?<p className="error-msg">{this.props.msg}</p>:null}
<InputItem onChange={v=>this.handleChange('user',v)}>使用者名稱</InputItem>
<InputItem onChange={v=>this.handleChange('pwd',v)} type="password">密碼</InputItem>
<InputItem onChange={v=>this.handleChange('repeatpwd',v)} type="password">確認密碼</InputItem>
<RadioItem onChange={()=>this.handleChange('type','genius')} checked={this.state.type=='genius'}>
牛人
</RadioItem>
<RadioItem onChange={()=>this.handleChange('type','boss')} checked={this.state.type=='boss'}>
boss
</RadioItem>
</List>
<WhiteSpace/>
<Button type="primary" onClick={this.handleRegister}>註冊</Button>
<WhiteSpace/>
</WingBlank>
</div>
)
}
}
export default Register
authroute 是用來判斷輸入的連結地址是否符合要求以及使用者登入情況,進而判斷是否跳轉
import React from 'react'
import axios from 'axios'
import {withRouter} from 'react-router-dom'
//進行判斷是否登陸並進行路由跳轉
@withRouter
class AuthRoute extends React.Component{
componentDidMount(){
const publicList = ['/login','/register']
const pathname = this.props.location.pathname
//判斷輸入的連結是否符合要求
if(publicList.indexOf(pathname)>-1){
return null
}
//獲取使用者資訊
axios.get('/user/info').then(res=>{
//判斷是否登入,如果沒有登入,則跳轉到登入介面
if(res.status==200){
if(res.data.code==0){
}else{
this.props.history.push('/login')
}
console.log(res.data);
}
})
//使用者狀態:是否登陸
//現在的URL地址 login是不需要跳轉的
//使用者的身份是boss還是牛人
//使用者是否完善資訊(頭像,簡介)
}
render(){
return null
}
}
export default AuthRoute
注:此部分程式碼提交的簡介為first commit,在檢視原始碼時按照順序看循序漸進,會更容易理解。如果覺得寫得不錯,希望給個start。
相關推薦
react專案實戰二 登入註冊頁面的完成
1、首先是新建專案,並引入相關依賴 新建專案參考部落格 在開始之前,推薦先學習一下redux的簡單使用 相關庫: npm install redux --save npm run eject 展示出所有配置 npm install express --sav
react專案實戰三 登入註冊頁面與資料庫連線
ps:此部分(第二部分)的程式碼,提交簡介為second commit 原始碼地址 需要引入依賴庫 npm install body-parser --save 接收post請求返回的引數 npm install utility --save MD5加密
react專案實戰五 個人中心頁面
新增庫依賴 npm install browser-cookies --save 進行瀏覽器cookie的操作 個人中心頁面 頁面的開發沒有什麼難度,直接使用antd-mobile的元件即可 src\component\usercenter\usercente
記錄第一個小專案,基於django的登入註冊頁面
教程來源:http://zmrenwu.com 專案是基於django自帶的auth模組來認證的,檢視AbstractUser模組原始碼,發現有username,firestname,last 和email,不夠用,所以我們繼承這個類, 加上一個nickname屬性 設定
例子:實現最新版本Node.js中Express+mongodb的登入註冊頁面
由於版本差異巨大且不相容的情況下,作為才開始學習Node.js的菜鳥,書籍上的例子是不能看了,因此仿照著網路大神中的例子自己再歸納總結了一遍,方便自己以後檢視。好記性不如爛筆頭嘛。 這裡主要使用的版本是express4.0+mongodb最新版本以及Bootstrap3.0介面所做。 一
安卓專案實戰之CoordinatorLayout實現頁面特效(一)
效果圖如下: material design控制元件簡介: 轉載自:https://blog.csdn.net/gitzzp/article/details/52573068 CoordinatorLayout CoordinatorLayout:協調者佈局。它是support
二 網站註冊頁面案例及其知識點
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <b
基於servlet的web表單登入註冊頁面
這篇部落格存放很久了,才看到一直在草稿箱裡,再整理一下發出來。 結合嗶哩嗶哩教學視訊,實際寫了一遍web的簡單專案。 一、專案結構圖 二、程式碼片段 1.建立實體類 程式碼如下: package com.liumce.bean; import
springboot整合JPA寫一個登入註冊頁面
建立工程 需要匯入的部件 application.yml配置檔案 spring: devtools: restart: enabled: false datasource: driver-class-name: com.mysql.cj.jdbc.Dr
bootstarp標籤頁實現登入註冊頁面
最簡單的實現樣式 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <
vue 一個簡單的專案 之二 城市選擇頁面 step3
上篇,我們完成了城市選擇頁面頂部的佈局。本篇,我們來實現城市選擇頁面的列表佈局。 首先建立一個分支 city-list, pull 下來,在新分支上寫程式碼。 好啦。開啟編輯器,在city/components 中建立元件List.vue 初始化一下,List.vue 程式碼 如下。
vue 一個簡單的專案 之二 城市選擇頁面 step4
上篇,我們實現了城市列表的樣式,遮蔽了瀏覽器的滑動,同時,在子元素中沒有設定滑動。本篇我們來設定一個友好的滑動與字母表的佈局。 我們使用第三方包 BetterScroll 地址:https://github.com/ustbhuangyi/better-scroll 先,在專
Hive專案實戰二
1.資料清洗 1)資料分析 在video.txt中,視訊可以有多個所屬分類,每個所屬分類用&符號分割,並且分割的兩邊有空格字元,多個相關視訊又用“\t”進行分割。為了分析資料時方便對存在多個子元素的資料進行操作,我們首先進行資料重組清洗操作。 具體做法:
nodejs+fs+express寫的前期的登入註冊頁面
首先,要把資料存放到本地,就必須使用後端,現在沒有使用資料庫而是使用原始的fs寫的一個登入和註冊的頁面,實現是使用者名稱不能重複,根據使用者名稱來判斷該使用者是否註冊過,資料夾中的檔案,是根據每個人的名字作為檔案的名稱。 先寫好前端的頁面,也就是註冊和登入的頁面,就是一個表
使用bootstrap編寫登入註冊頁面,半透明仿蘋果系統風格。
效果圖: html程式碼:(程式碼不全) <!--登入按鈕--> <div class="col-xs-1 col-xs-offset-9 aTopAndBottom"> <a hr
PHP PDO+MySQL實現登入註冊頁面
connect.php——連線資料庫,以後要連資料庫直接include,不用再一寫一大堆 <?php header("Content-type: text/html;charset=utf-8"); $dbh = new PDO("mysql:hos
react專案實戰(許可權模組開發八)js檔案分開打包
才開發幾個介面就發現打包出的index.js檔案就有700多kb了,由於部分外掛的js檔案是不會變化的,單獨打包可以充分利用瀏覽器的快取功能。 第一步:在專案跟目錄下面新增一個webpack.config.js檔案 第二步:為了將原有的js分開打,需要修
SSH框架登入註冊頁面用struts的xml配置方式校驗遇到的問題及解決方法
SSH框架用struts的xml配置進行前臺驗證,驗證登入和註冊頁面遇到的問題及解決方式 一、首先新建struts前臺驗證的配置檔案 命名方式是:類名-validation.xml,我的是LoginAction類和RegisterAction類,所以我的
[thinkPHP5專案實戰_06]引入前臺頁面
一個網站的前端分一般分為前臺和後臺兩個部分,下面說明一下如何在tp5中引入前臺頁面。 tp5中訪問的是模組下的控制器,通過控制器獲取檢視下的頁面(模板佈局),輸出替換引導頁面載入靜態檔案(css,js,image) 1.前臺資源佈置 project 應用部署目錄 ├─a
Android 登入註冊頁面遇到的一些問題方法-小白懂得太少
1.String ver =get_ver.getText().toString().trim() 其中toString().trim(),表示獲得物件的欄位的值,然後轉換成string 型別,並且去掉前後空白trim()是去兩邊空格的方法。toString().trim()