国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
#基於React的登入
第一種登入
第二種登入
程式碼
login.jsx
記憶元件selector
首頁 web前端 js教程 React如何實現(xiàn)登入? react登入模組的詳解

React如何實現(xiàn)登入? react登入模組的詳解

Sep 11, 2018 pm 04:29 PM
react

本篇文章主要的介紹了關(guān)於react的登入模組,詳細(xì)的介紹了關(guān)於react的登入情況?,F(xiàn)在就讓我們一起來看看文章的文字吧

#基於React的登入

第一種登入

  • #Login頁面提交登入handleSubmit(), 中直接呼叫API請求。請求登入成功後跳轉(zhuǎn)history.push(nextPathname, null);

  • 實作方式參考?http://blog.csdn.net/qq_27384769/article/details/78775835

第二種登入

  • Login頁面提交登入handleSubmit() 後,透過saga發(fā)起非同步請求。

  • 請求成功後 發(fā)起action 呼叫reducer. 重新載入Login頁面。

  • 在Login頁面生命週期componentWillReceiveProps 驗證登入資訊要求跳轉(zhuǎn)。

以下是第二種登入方式的解說

reducer 中的資料結(jié)構(gòu)

auth:{
	type:?"COMPLOGIN/RECEIVE_DATA",?
	isFetching:?false,?
	data:?{uid:?1,?permissions:?Array(5),?role:?"系統(tǒng)管理員",?roleType:?1,?userName:?"系統(tǒng)管理員"}
}

程式碼

login.jsx

  • ##componentWillReceiveProps 登入成功後調(diào)整

  • handleSubmit 處理提交登入

import?React?from?'react';import?{Form,?Icon,?Input,?Button,?Checkbox}?from?'antd';import?{connect}?from?'react-redux';import?{bindActionCreators}?from?'redux';import?{findData,?receiveData}?from?'../actions';import?{selectVisibleMenuResourceTreeTable}?from?'../selector';const?FormItem?=?Form.Item;class?Login?extends?React.Component?{????componentWillMount()?{????????const?{receiveData}?=?this.props;????????receiveData(null,?'auth');
????}????componentWillReceiveProps(nextProps)?{????????const?{auth:?nextAuth?=?{}}?=?nextProps;????????if?(nextAuth.data?&&?nextAuth.data.uid)?{???//?判斷是否登陸
????????????localStorage.setItem('user',?JSON.stringify(nextAuth.data));????????????this.props.history.push('/',?null);
????????}
????}????handleSubmit?=?(e)?=>?{????????e.preventDefault();????????this.props.form.validateFields((err,?values)?=>?{????????????if?(!err)?{????????????????console.log('Received?values?of?form:?',?values);????????????????const?{findData}?=?this.props;????????????????if?(values.userName?===?'admin'?&&?values.password?===?'admin')?findData({
????????????????????funcName:?'admin',
????????????????????stateName:?'auth'
????????????????});????????????????if?(values.userName?===?'guest'?&&?values.password?===?'guest')?findData({
????????????????????funcName:?'guest',
????????????????????stateName:?'auth'
????????????????});
????????????}
????????});
????};????gitHub?=?()?=>?{????????console.log("gitHub");
????};????render()?{????????const?{getFieldDecorator}?=?this.props.form;????????return?(????????????<p className="login">
????????????????<p className="login-form">
????????????????????<p className="login-logo">
????????????????????????<span>React?Admin</span>
????????????????????</p>
????????????????????<Form onSubmit={this.handleSubmit} style={{maxWidth: &#39;300px&#39;}}>
????????????????????????<FormItem>
????????????????????????????{getFieldDecorator('userName',?{
????????????????????????????????rules:?[{required:?true,?message:?'請輸入用戶名!'}],
????????????????????????????})(????????????????????????????????<Input prefix={<Icon type="user" style={{fontSize: 13}}/>}
???????????????????????????????????????placeholder="管理員輸入admin,?游客輸入guest"/>
????????????????????????????)}????????????????????????</FormItem>
????????????????????????<FormItem>
????????????????????????????{getFieldDecorator('password',?{
????????????????????????????????rules:?[{required:?true,?message:?'請輸入密碼!'}],
????????????????????????????})(????????????????????????????????<Input prefix={<Icon type="lock" style={{fontSize: 13}}/>}?type="password"
???????????????????????????????????????placeholder="管理員輸入admin,?游客輸入guest"/>
????????????????????????????)}????????????????????????</FormItem>
????????????????????????<FormItem>
????????????????????????????{getFieldDecorator('remember',?{
????????????????????????????????valuePropName:?'checked',
????????????????????????????????initialValue:?true,
????????????????????????????})(????????????????????????????????<Checkbox>記住我</Checkbox>
????????????????????????????)}????????????????????????????<a className="login-form-forgot" href="" style={{float: &#39;right&#39;}}>忘記密碼</a>
????????????????????????????<Button type="primary" htmlType="submit" className="login-form-button"
                                    style={{width: &#39;100%&#39;}}>
????????????????????????????????登錄????????????????????????????</Button>
????????????????????????????或?<a href="">現(xiàn)在就去注冊!</a>
????????????????????????????<p>
????????????????????????????????<Icon type="github" onClick={this.gitHub}/>(第三方登錄)????????????????????????????</p>
????????????????????????</FormItem>
????????????????????</Form>
????????????????</p>
????????????</p>
????????);
????}
}const?mapStateToPorps?=?state?=>?{????return?{
????????auth:?selectVisibleMenuResourceTreeTable(state)
????}
};const?mapDispatchToProps?=?dispatch?=>?({
????findData:?bindActionCreators(findData,?dispatch),
????receiveData:?bindActionCreators(receiveData,?dispatch)
});export?default?Form.create()(connect(mapStateToPorps,?mapDispatchToProps)(Login));

actions

  • findData 點選按鈕啟動請求

  • requestData 呼叫API前

  • requestData 呼叫API 取得到資料

import?*?as?type?from?'./actionTypes';export?const?findData?=?(data)?=>?{????let?{funcName,?stateName}?=?data;????return?{
????????type:?type.COMP_LOGIN_FIND_DATA,
????????funcName,
????????stateName
????}
}export?const?requestData?=?category?=>?({
????type:?type.COMP_LOGIN_REQUEST_DATA,
????category
});export?const?receiveData?=?(data,?category)?=>?({
????type:?type.COMP_LOGIN_RECEIVE_DATA,
????data,
????category
});

#actionTypes

export?const?COMP_LOGIN_FIND_DATA?=?'COMPLOGIN/FIND_DATA';export?const?COMP_LOGIN_REQUEST_DATA?=?'COMPLOGIN/REQUEST_DATA';export?const?COMP_LOGIN_RECEIVE_DATA?=?'COMPLOGIN/RECEIVE_DATA';

index

import?React?from?'react';import?Bundle?from?'../../../bundle/views/bundle';import?*?as?actions?from?'./actions';const?view?=?(props)?=>?{????return?(????????<Bundle load={() =>?import("./lazy")}>
????????????{(View)?=>?{????????????????return?<View {...props}/>
????????????}}????????</Bundle>
????);
};export?{actions,?view};

lazy 非同步載入

  • 根據(jù)元件載入對應(yīng)的sagas\reducer\view

  • reducer 中的資料結(jié)構(gòu):[compLoginName]: compLoginReducer

import?compLoginSagas?from?'./sagas';import?compLoginReducer?from?'./reducer';import?view?from?'./views/Login';import?{UumsCompsReducerNames}?from?'../../constants';const?compLoginName?=?UumsCompsReducerNames.compLogin;const?reducer?=?{
????[compLoginName]:?compLoginReducer
};const?sagas?=?{
????[compLoginName]:?compLoginSagas
};export?{sagas,?reducer,?view};

reducer

  • 純函數(shù)

export?default?(state?=?{},?action)?=>?{????const?{type}?=?action;????switch?(type)?{????????case?types.COMP_LOGIN_REQUEST_DATA:?{????????????return?{????????????????...state,?type:?type,?isFetching:?true
????????????}
????????}????????case?types.COMP_LOGIN_RECEIVE_DATA:????????????return?{...state,?type:?type,isFetching:?false,?data:?action.data};????????default:????????????return?{...state};
????}
}

sagas

#非同步呼叫

##
import?*?as?http?from?'../axios/index';import?{call,?put,?takeLatest}?from?'redux-saga/effects';import?{requestData,?receiveData}?from?'./actions';import?{COMP_LOGIN_FIND_DATA}?from?'./actionTypes';export?const?fetchData?=?({funcName,?params})?=>?{????return?http[funcName](params).then(res?=>?{????????return?res;
????});
};function*?fetchLoginInfo(data)?{????try?{????????let?{stateName}?=?data;????????yield?put(requestData());????????const?result?=?yield?call(fetchData,?data);????????yield?put(receiveData(result,?stateName));
????}?catch?(e)?{????????console.log(e);
????}
}function*?sagas()?{????yield?takeLatest(COMP_LOGIN_FIND_DATA,?fetchLoginInfo);
}export?default?sagas;

selector

記憶元件selector

import {createSelector} from &#39;reselect&#39;;const getCompLoginData = (state) => state.compLoginData;export const 
selectVisibleMenuResourceTreeTable = createSelector(
    [getCompLoginData],
    (compLoginData) => compLoginData
);

這篇文章到這就結(jié)束了(想看更多就到PHP中文網(wǎng)

React使用手冊

欄位中學(xué)習(xí)),有問題的可以在下方留言提問。

#

以上是React如何實現(xiàn)登入? react登入模組的詳解的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

React Router使用指南:如何實現(xiàn)前端路由控制 React Router使用指南:如何實現(xiàn)前端路由控制 Sep 29, 2023 pm 05:45 PM

ReactRouter使用指南:如何實現(xiàn)前端路由控制隨著單頁應(yīng)用的流行,前端路由成為了一個不可忽視的重要部分。 ReactRouter作為React生態(tài)系統(tǒng)中最受歡迎的路由庫,提供了豐富的功能和易用的API,使得前端路由的實作變得非常簡單和靈活。本文將介紹ReactRouter的使用方法,並提供一些具體的程式碼範(fàn)例。安裝ReactRouter首先,我們需要

Java框架與前端React框架的整合 Java框架與前端React框架的整合 Jun 01, 2024 pm 03:16 PM

Java框架與React框架的整合:步驟:設(shè)定後端Java框架。建立專案結(jié)構(gòu)。配置建置工具。建立React應(yīng)用程式。編寫RESTAPI端點。配置通訊機(jī)制。實戰(zhàn)案例(SpringBoot+React):Java程式碼:定義RESTfulAPI控制器。 React程式碼:取得並顯示API回傳的資料。

PHP、Vue和React:如何選擇最適合的前端框架? PHP、Vue和React:如何選擇最適合的前端框架? Mar 15, 2024 pm 05:48 PM

PHP、Vue和React:如何選擇最適合的前端框架?隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,前端框架在Web開發(fā)中起著至關(guān)重要的作用。 PHP、Vue和React作為三種代表性的前端框架,每一種都具有其獨特的特徵和優(yōu)勢。在選擇使用哪種前端框架時,開發(fā)人員需要根據(jù)專案需求、團(tuán)隊技能和個人偏好做出明智的決策。本文將透過比較PHP、Vue和React這三種前端框架的特徵和使

vue.js vs.反應(yīng):特定於項目的考慮因素 vue.js vs.反應(yīng):特定於項目的考慮因素 Apr 09, 2025 am 12:01 AM

Vue.js適合中小型項目和快速迭代,React適用於大型複雜應(yīng)用。 1)Vue.js易於上手,適用於團(tuán)隊經(jīng)驗不足或項目規(guī)模較小的情況。 2)React的生態(tài)系統(tǒng)更豐富,適合有高性能需求和復(fù)雜功能需求的項目。

React與Vue:Netflix使用哪個框架? React與Vue:Netflix使用哪個框架? Apr 14, 2025 am 12:19 AM

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

React在HTML中的作用:增強(qiáng)用戶體驗 React在HTML中的作用:增強(qiáng)用戶體驗 Apr 09, 2025 am 12:11 AM

React通過JSX與HTML結(jié)合,提升用戶體驗。 1)JSX嵌入HTML,使開發(fā)更直觀。 2)虛擬DOM機(jī)制優(yōu)化性能,減少DOM操作。 3)組件化管理UI,提高可維護(hù)性。 4)狀態(tài)管理和事件處理增強(qiáng)交互性。

React的生態(tài)系統(tǒng):庫,工具和最佳實踐 React的生態(tài)系統(tǒng):庫,工具和最佳實踐 Apr 18, 2025 am 12:23 AM

React生態(tài)系統(tǒng)包括狀態(tài)管理庫(如Redux)、路由庫(如ReactRouter)、UI組件庫(如Material-UI)、測試工具(如Jest)和構(gòu)建工具(如Webpack)。這些工具協(xié)同工作,幫助開發(fā)者高效開發(fā)和維護(hù)應(yīng)用,提高代碼質(zhì)量和開發(fā)效率。

Netflix的前端:React(或VUE)的示例和應(yīng)用 Netflix的前端:React(或VUE)的示例和應(yīng)用 Apr 16, 2025 am 12:08 AM

Netflix使用React作為其前端框架。 1)React的組件化開發(fā)模式和強(qiáng)大生態(tài)系統(tǒng)是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復(fù)雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優(yōu)化了渲染效率和用戶交互管理。

See all articles