亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

React路由深入實(shí)戰(zhàn)用戶登錄

williamwen1986 / 994人閱讀

摘要:本篇基于路由來(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)前inputvalue

定義一個(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

相關(guān)文章

  • React實(shí)戰(zhàn)篇(React仿今日頭條)

    摘要:前言上次初學(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...

    NicolasHe 評(píng)論0 收藏0
  • angular4實(shí)戰(zhàn)(2) router

    摘要:在上一章節(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)引入路由模塊,接下...

    wanglu1209 評(píng)論0 收藏0
  • React+ Redux + React-route + Axios 實(shí)戰(zhàn),很適合進(jìn)階

    摘要:前言前段時(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í)...

    phpmatt 評(píng)論0 收藏0
  • 基于 Webpack 4 多入口生成模板用于服務(wù)端渲染的方案及實(shí)戰(zhàn)

    摘要:原作者原鏈接基于多入口生成模板用于服務(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-...

    big_cat 評(píng)論0 收藏0
  • 基于 Webpack 4 多入口生成模板用于服務(wù)端渲染的方案及實(shí)戰(zhàn)

    摘要:原作者原博文地址基于多入口生成模板用于服務(wù)端渲染的方案及實(shí)戰(zhàn)法律聲明警告本作品遵循署名非商業(yè)性使用禁止演繹未本地化版本協(xié)議發(fā)布。這是什么背景現(xiàn)代化的前端項(xiàng)目中很多都使用了客戶端渲染的單頁(yè)面應(yīng)用。 原作者:@LinuxerPHL原博文地址: 基于 Webpack 4 多入口生成模板用于服務(wù)端渲染的方案及實(shí)戰(zhàn) 法律聲明 警告:本作品遵循 署名-非商業(yè)性使用-禁止演繹3.0 未本地化版本(...

    Lavender 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<