摘要:本篇基于路由來(lái)實(shí)戰(zhàn)用戶登錄功能,會(huì)涉及到表單的數(shù)據(jù)綁定表單提交和登錄判斷等新玩意。
本篇基于React路由來(lái)實(shí)戰(zhàn)用戶登錄功能,會(huì)涉及到表單的數(shù)據(jù)綁定、表單提交和登錄判斷等新玩意。
續(xù)上篇:React的路由深入
先來(lái)創(chuàng)建一個(gè)組件 - 登錄表單組件
// file:src/components/UserLogin.js "use strict"; import React from "react"; export default class UserLogin extends React.Component { construct(props) { super(props); this.state = { username: "", password: "" }; } render() { return} }用戶登錄
用戶名:密碼:
綁定表單元素到state,并且綁定點(diǎn)擊事件到按鈕
// file:src/components/UserLogin.js "use strict"; import React from "react"; export default class UserLogin extends React.Component { construct(props) { super(props); this.state = { username: "", password: "" }; } setUserInfo(event, key) { // input表單元素會(huì)自動(dòng)綁定一個(gè)event對(duì)象對(duì)事件函數(shù) // event對(duì)象target屬性等于input DOM元素對(duì)象,所以event.target.value 可以獲取到當(dāng)前input的value值 let obj = {}; obj[key] = event.target.value; // 更新狀態(tài) this.setState(obj); } render() { return} }用戶登錄
用戶名: { this.setUserInfo(event, "username"); }}>密碼: { this.setUserInfo(event, "password"); }}>
input表單元素會(huì)自動(dòng)綁定一個(gè)event對(duì)象對(duì)事件函數(shù)
event對(duì)象target屬性等于input DOM元素對(duì)象,所以event.target.value 可以獲取到當(dāng)前input的value值
定義一個(gè)用戶登錄操作類
本篇不涉及后臺(tái)接口,暫時(shí)用固定用戶名和密碼模擬登錄
// file:src/core/Passport.js "use strict"; export default class Passport { constructor() { // 用戶登錄標(biāo)識(shí) this.isLogin = false; } login(username, password, callback) { if (username === "mi360" && password === "123") { // 登錄成功 this.isLogin = true; // 將登錄成功之后的操作給調(diào)用者處理 callback(); } else { // 登錄失敗 // 這里簡(jiǎn)單彈出一個(gè)消息 alert("登錄失?。?); } } }
在登錄表單中調(diào)用登錄操作類
// file:src/components/UserLogin.js "use strict"; import React from "react"; // 導(dǎo)入登錄操作類 import Passport from "../core/Passport"; export default class UserLogin extends React.Component { construct(props) { super(props); this.state = { username: "", password: "" }; } setUserInfo(event, key) { // input表單元素會(huì)自動(dòng)綁定一個(gè)event對(duì)象對(duì)事件函數(shù) // event對(duì)象target屬性等于input DOM元素對(duì)象,所以event.target.value 可以獲取到當(dāng)前input的value值 let obj = {}; obj[key] = event.target.value; // 更新狀態(tài) this.setState(obj); } render() { return} }用戶登錄
用戶名: { this.setUserInfo(event, "username"); }}>密碼: { this.setUserInfo(event, "password"); }}>
在我們的路由組件中加上登錄組件的路由
// file:src/components/MyRouter.js "use strict"; import React from "react"; import News from "../components/News"; import Shop from "../components/Shop"; import Detail from "../components/Detail"; // 用戶登錄組件 import Login from "../components/UserLogin"; import { HashRouter as Router, Route, Redirect, Link } from "react-router-dom"; export default class MyRouter extends React.Component { render() { return} }
- 首頁(yè)
- 商品
- 新聞
- 用戶登錄
訪問頁(yè)面,預(yù)覽效果:
輸入中正確的用戶名和密碼會(huì)跳到新聞頁(yè)面!
添加登錄判斷
給新聞頁(yè)面加上登錄判斷,如果沒有登錄,自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面
import React from "react"; import News from "../components/News"; import Shop from "../components/Shop"; import Detail from "../components/Detail"; import Login from "../components/UserLogin"; import { HashRouter as Router, Route, Redirect, Link } from "react-router-dom"; // 導(dǎo)入用戶登錄操作類,并實(shí)例化 import Passport from "../core/Passport"; let passport = new Passport(); export default class MyRouter extends React.Component { render() { return} }
- 首頁(yè)
- 商品
- 新聞
- 用戶登錄
// 使用render屬性定義處理函數(shù)路由跳轉(zhuǎn)判斷 { if (passport.islogin) { return } else { return } }} /> // 將用戶操作類實(shí)例傳遞給用戶登錄組件 { return }} />
修改用戶登錄組件使用路由傳遞過(guò)來(lái)的用戶登錄操作類
"use strict"; import React from "react"; import Passport from "../core/Passport"; export default class UserLogin extends React.Component { constructor(props) { super(props); this.state = { username: "", password: "" } } setUserInfo(event, key) { let obj = {}; obj[key] = event.target.value; this.setState(obj); } render() { return} }用戶登錄
用戶名: { this.setUserInfo(event, "username"); }} />密碼: { this.setUserInfo(event, "password") }} />
再次預(yù)覽訪問效果,并且測(cè)試新聞未登錄下是否能夠訪問,登錄后能否訪問!
原文鏈接:https://www.mi#/articles...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/105864.html
摘要:前言上次初學(xué)用寫了個(gè)后臺(tái)管理,這次便尋思寫個(gè)移動(dòng)端的項(xiàng)目。便有了這次的這個(gè)項(xiàng)目。然后通過(guò)來(lái)判斷如何動(dòng)畫具體處理異步用來(lái)書寫跟配置還有一些零零散散的知識(shí)點(diǎn),就不介紹了,具體可以到上查看。個(gè)人博客在線觀看地址 前言 上次初學(xué)用 react 寫了個(gè)后臺(tái)管理,這次便尋思寫個(gè)移動(dòng)端的項(xiàng)目。便有了這次的這個(gè)項(xiàng)目。 這個(gè)項(xiàng)目以前寫了個(gè) vue 的版本。有興趣的可以 點(diǎn)擊進(jìn)入 模擬數(shù)據(jù)用的是 Eas...
摘要:在上一章節(jié),通過(guò)新建項(xiàng)目之后,會(huì)自動(dòng)引入路由模塊,接下來(lái)需要做的事情就是對(duì)路由模塊進(jìn)行配置。為了方便維護(hù),單獨(dú)把路由模塊的配置拿出來(lái),再去輸出到中。路由守衛(wèi)業(yè)務(wù)需求是在沒有登錄的情況下,是不允許跳入到下一個(gè)頁(yè)面的。 router 單頁(yè)面應(yīng)用通過(guò)路由來(lái)去渲染不同的視圖,為用戶在同一個(gè)頁(yè)面看到不同的場(chǎng)景,提供基礎(chǔ)服務(wù)。 在上一章節(jié),通過(guò)新建項(xiàng)目之后,ngModule會(huì)自動(dòng)引入路由模塊,接下...
摘要:前言前段時(shí)間學(xué)習(xí)完了的基礎(chǔ)自己網(wǎng)上找了一些實(shí)戰(zhàn)項(xiàng)目做了幾個(gè)感覺項(xiàng)目不是很全面就想做一個(gè)完整的項(xiàng)目來(lái)提升自己的水平以前學(xué)習(xí)的時(shí)候就看過(guò)大神的項(xiàng)目所以自己打算用重寫它后端數(shù)據(jù)還是用實(shí)在沒有精力擼后端感謝大神該項(xiàng)目是餓了么目前開發(fā)了登錄注冊(cè)購(gòu) 前言 前段時(shí)間學(xué)習(xí)完了React的基礎(chǔ),自己網(wǎng)上找了一些實(shí)戰(zhàn)項(xiàng)目,做了幾個(gè)感覺項(xiàng)目不是很全面,就想做一個(gè)完整的項(xiàng)目來(lái)提升自己的React水平.以前學(xué)習(xí)...
摘要:原作者原鏈接基于多入口生成模板用于服務(wù)端渲染的方案及實(shí)戰(zhàn)法律聲明警告本作品遵循署名非商業(yè)性使用禁止演繹未本地化版本協(xié)議發(fā)布。這是什么背景現(xiàn)代化的前端項(xiàng)目中很多都使用了客戶端渲染的單頁(yè)面應(yīng)用。 原作者:@LinuxerPHL原鏈接:基于 Webpack 4 多入口生成模板用于服務(wù)端渲染的方案及實(shí)戰(zhàn) 法律聲明 警告:本作品遵循 署名-非商業(yè)性使用-禁止演繹3.0 未本地化版本(CC BY-...
摘要:原作者原博文地址基于多入口生成模板用于服務(wù)端渲染的方案及實(shí)戰(zhàn)法律聲明警告本作品遵循署名非商業(yè)性使用禁止演繹未本地化版本協(xié)議發(fā)布。這是什么背景現(xiàn)代化的前端項(xiàng)目中很多都使用了客戶端渲染的單頁(yè)面應(yīng)用。 原作者:@LinuxerPHL原博文地址: 基于 Webpack 4 多入口生成模板用于服務(wù)端渲染的方案及實(shí)戰(zhàn) 法律聲明 警告:本作品遵循 署名-非商業(yè)性使用-禁止演繹3.0 未本地化版本(...
閱讀 2402·2021-10-09 09:41
閱讀 1804·2019-08-30 15:53
閱讀 1053·2019-08-30 15:52
閱讀 3521·2019-08-30 11:26
閱讀 829·2019-08-29 16:09
閱讀 3504·2019-08-29 13:25
閱讀 2326·2019-08-26 16:45
閱讀 1992·2019-08-26 11:51