1- import React , { PureComponent } from 'react' ;
1+ import React , { useState , useEffect , useCallback } from 'react' ;
22import axios from 'axios' ;
33import { RouteComponentProps } from 'react-router' ;
44import Button from 'reactstrap/lib/Button' ;
@@ -10,30 +10,34 @@ import userInfoMock from '../../mock/userInfo.json';
1010import { AuthContextProps } from '../../contexts/auth/consumerHOC' ;
1111import FadeInEntrance from '../../components/fadeInEntrance' ;
1212
13- // #region types
14- type Props = { } & RouteComponentProps & AuthContextProps ;
15-
16- type State = {
17- email : string ;
18- password : string ;
19- isLogging : boolean ;
20- } ;
21- // #endregion
22-
23- class Login extends PureComponent < Props , State > {
24- state = {
25- email : '' ,
26- password : '' ,
27- isLogging : false ,
28- } ;
2913
30- // #region lifecycle
31- componentDidMount ( ) {
32- this . disconnectUser ( ) ; // diconnect user: remove token and user info
33- }
14+ type Props = { } & RouteComponentProps < any , any > & AuthContextProps ;
15+
16+
17+ function Login ( { disconnectUser = ( ) => { } , history, setToken, setUserInfo} : Props ) {
18+ const [ email , setEmail ] = useState < string > ( '' )
19+ const [ password , setPassword ] = useState < string > ( '' )
20+ const [ isLogging , setIsLogging ] = useState < boolean > ( false )
21+
22+ // #region on mount
23+ useEffect ( ( ) => {
24+ disconnectUser ( ) ; // diconnect user: remove token and user info
25+ } , [ ] )
26+ // #endregion
3427
35- render ( ) {
36- const { email, password, isLogging } = this . state ;
28+ // #region input callbacks
29+ const handlesOnEmailChange = useCallback ( ( event : React . ChangeEvent < HTMLInputElement > ) => {
30+ event && event . preventDefault ( ) ;
31+ // should add some validator before setState in real use cases
32+ setEmail ( event . target . value . trim ( ) ) ;
33+ } , [ ] ) ;
34+
35+ const handlesOnPasswordChange = ( event : React . ChangeEvent < HTMLInputElement > ) => {
36+ event && event . preventDefault ( ) ;
37+ // should add some validator before setState in real use cases
38+ setPassword ( event . target . value . trim ( ) ) ;
39+ } ;
40+ // #endregion
3741
3842 return (
3943 < FadeInEntrance >
@@ -59,7 +63,7 @@ class Login extends PureComponent<Props, State> {
5963 placeholder = "Email"
6064 autoComplete = "username email"
6165 value = { email }
62- onChange = { this . handlesOnEmailChange }
66+ onChange = { handlesOnEmailChange }
6367 />
6468 </ Col >
6569 </ div >
@@ -120,24 +124,13 @@ class Login extends PureComponent<Props, State> {
120124 </ FadeInEntrance >
121125 ) ;
122126 }
123- // #endregion
124127
125- disconnectUser = ( ) => {
126- const { disconnectUser } = this . props ;
127- disconnectUser ( ) ;
128- } ;
129128
130- handlesOnEmailChange = ( event : React . ChangeEvent < HTMLInputElement > ) => {
131- event . preventDefault ( ) ;
132- // should add some validator before setState in real use cases
133- this . setState ( { email : event . target . value . trim ( ) } ) ;
134- } ;
135129
136- handlesOnPasswordChange = ( event : React . ChangeEvent < HTMLInputElement > ) => {
137- event . preventDefault ( ) ;
138- // should add some validator before setState in real use cases
139- this . setState ( { password : event . target . value . trim ( ) } ) ;
140- } ;
130+
131+
132+
133+
141134
142135 handlesOnLogin = async ( event : React . MouseEvent < HTMLButtonElement > ) => {
143136 if ( event ) {
0 commit comments