import React, { Component } from 'react';
import { connect } from 'dva';
import { Link } from 'dva/router';
import { Checkbox, Alert, Icon } from 'antd';
import Login from 'components/Login';
import styles from './Login.less';
const { Tab, UserName, Password, Mobile, Captcha, Submit } = Login;
@connect(({ login, loading }) => ({
login,
submitting: loading.effects['login/login'],
}))
import React, { Component } from 'react';
import { connect } from 'dva';
import { Link } from 'dva/router';
import { Checkbox, Alert, Icon } from 'antd';
import Login from 'components/Login';
import styles from './Login.less';
const { Tab, UserName, Password, Mobile, Captcha, Submit } = Login;
@connect(({ login, loading }) => ({
login,
submitting: loading.effects['login/login'],
}))
export default class LoginPage extends Component {
state = {
type: 'account',
autoLogin: true,
};
onTabChange = type => {
this.setState({ type });
};
handleSubmit = (err, values) => {
const { type } = this.state;
if (!err) {
this.props.dispatch({
type: 'login/login',
payload: {
...values,
type,
},
});
}
};
changeAutoLogin = e => {
this.setState({
autoLogin: e.target.checked,
});
};
renderMessage = content => {
return <Alert style={{ marginBottom: 24 }} message={content} type="error" showIcon />;
};
render() {
const { login, submitting } = this.props;
const { type } = this.state;
return (
<div className={styles.main}>
<Login defaultActiveKey={type} onTabChange={this.onTabChange} onSubmit={this.handleSubmit}>
<Tab key="account" tab="賬戶密碼登錄">
<UserName name="username" placeholder="請(qǐng)輸入帳號(hào)..." />
<Password name="password" placeholder="請(qǐng)輸入密碼..." />
</Tab>
{/* <div>
<Checkbox checked={this.state.autoLogin} onChange={this.changeAutoLogin}>
自動(dòng)登錄
</Checkbox>
</div> */}
<Submit loading={submitting}>登錄</Submit>
</Login>
</div>
);
}
}
import { routerRedux } from 'dva/router';
import { linkApi } from '../services/api';
import { setAuthority } from '../utils/authority';
import { reloadAuthorized } from '../utils/Authorized';
import { notification } from 'antd';
export default {
namespace: 'login',
state: {
status: undefined,
},
effects: {
*login({ payload }, { call, put }) {
const response = yield call(linkApi, {
cmd:"tx.web.restful.apis.controllers.services.base.BaseService#login",
datas:{
username:payload.username,
password:payload.password,
eType:0
},
});
// Login successfully
if (response.state == 200 ) {
yield put({
type: 'changeLoginStatus',
payload: response.datas
});
reloadAuthorized();
yield put(routerRedux.push('/'));
}
},
*logout(_, { put, select }) {
try {
// get location pathname
const urlParams = new URL(window.location.href);
const pathname = yield select(state => state.routing.location.pathname);
// add the parameters in the url
urlParams.searchParams.set('redirect', pathname);
window.history.replaceState(null, 'login', urlParams.href);
} finally {
yield put({
type: 'changeLoginStatus',
payload: ""
});
reloadAuthorized();
yield put(routerRedux.push('/user/login'));
}
},
},
reducers: {
changeLoginStatus(state, { payload }) {
setAuthority(payload);
return {
...state,
status: payload.status,
type: payload.type,
};
},
},
};
({login, loading})=>({}) 這是一個(gè)函數(shù),和connect 函數(shù)的兩個(gè)參數(shù)不同,我應(yīng)該如何理解這個(gè)寫法?
這是使用的第一個(gè)函數(shù)mapStateToProps(state, ownProps) ps: 兩個(gè)參數(shù)相對(duì)應(yīng)。
login:這個(gè)參數(shù)就是[models/login.js]里面,[reducers/changeLoginStatus]的返回值。
login和submitting這個(gè)怎么理解,是指綁定到submitting到組件的this.props里面嗎?
按資料說(shuō)法,這兩個(gè)都是要加到this.props上面的對(duì)象。
那么他是如何把src/models/login.js 里面的effects觸發(fā)的?
[models/login.js],應(yīng)該在聲明路由[common/router.js]的時(shí)候就已經(jīng)指定,
觸發(fā)應(yīng)該是用的[ruotes/User/Login.js]的[handleSubmit]
并且在組件中沒(méi)有看到如何方法調(diào)用submitting.
調(diào)用應(yīng)該是指這里[ruotes/User/Login.js]的[render]
loading.effects['login/login'] 這個(gè)方法應(yīng)該如何理解?
這個(gè)就是猜測(cè)了,應(yīng)該是返回的[model/login.js]下面[*login]的執(zhí)行狀態(tài),bool值。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。