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="請輸入帳號..." />
<Password name="password" placeholder="請輸入密碼..." />
</Tab>
{/* <div>
<Checkbox checked={this.state.autoLogin} onChange={this.changeAutoLogin}>
自動登錄
</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})=>({}) 這是一個函數(shù),和connect 函數(shù)的兩個參數(shù)不同,我應(yīng)該如何理解這個寫法?
這是使用的第一個函數(shù)mapStateToProps(state, ownProps) ps: 兩個參數(shù)相對應(yīng)。
login:這個參數(shù)就是[models/login.js]里面,[reducers/changeLoginStatus]的返回值。
login和submitting這個怎么理解,是指綁定到submitting到組件的this.props里面嗎?
按資料說法,這兩個都是要加到this.props上面的對象。
那么他是如何把src/models/login.js 里面的effects觸發(fā)的?
[models/login.js],應(yīng)該在聲明路由[common/router.js]的時候就已經(jīng)指定,
觸發(fā)應(yīng)該是用的[ruotes/User/Login.js]的[handleSubmit]
并且在組件中沒有看到如何方法調(diào)用submitting.
調(diào)用應(yīng)該是指這里[ruotes/User/Login.js]的[render]
loading.effects['login/login'] 這個方法應(yīng)該如何理解?
這個就是猜測了,應(yīng)該是返回的[model/login.js]下面[*login]的執(zhí)行狀態(tài),bool值。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(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),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團(tuán)項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。