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