@@ -2,80 +2,83 @@ import React, { Component } from 'react';
2
2
import './App.css' ;
3
3
import '../node_modules/purecss/build/base.css' ;
4
4
import '../node_modules/purecss/build/forms.css' ;
5
+
5
6
class Field extends Component {
6
- static defaultProps = {
7
- value : '' ,
8
- type : 'text'
9
- }
10
- state = {
11
- invalidmsg : this . props . invalidmsg ,
12
- value : this . props . value
13
- }
14
- render ( ) {
15
- const {
16
- name,
17
- id = name ,
18
- label,
19
- onChange
20
- } = this . props ;
21
- const { value, invalidmsg } = this . state ;
22
- const inputProps = {
23
- ...this . props ,
24
- id,
25
- value,
26
- onChange : ( e ) => this . handleChange_onChange ( e , onChange )
27
- } ;
28
- return (
29
- < div className = "pure-control-group" >
30
- < label htmlFor = { id } > { label } </ label >
31
- < input { ...inputProps } style = { { minWidth : '200px' } } />
32
- {
33
- invalidmsg ?
34
- < span className = "pure-form-message-inline" > { invalidmsg } </ span > :
35
- null
36
- }
37
- </ div >
38
- ) ;
39
- }
40
- handleChange_onChange ( e , onChange ) {
41
- this . setState ( {
42
- value : e . target . value
43
- } ) ;
44
- this . validateField ( e ) ;
45
- if ( onChange && typeof onChange === 'function' ) {
46
- onChange ( e ) ;
47
- }
48
- }
49
- validateField ( e ) {
50
- const { target } = e ,
51
- { validity } = target ,
52
- { valueMissing, valid } = validity ;
53
- let invalidmsg ;
54
- if ( valueMissing ) {
55
- invalidmsg = 'This is a required field' ;
56
- } else if ( ! valid ) {
57
- invalidmsg = target . validationMessage ;
58
- }
59
- this . setState ( { invalidmsg } ) ;
60
- }
7
+ static defaultProps = {
8
+ value : '' ,
9
+ type : 'text'
10
+ }
11
+ state = {
12
+ invalidmsg : null ,
13
+ value : this . props . value
14
+ }
15
+ render ( ) {
16
+ const {
17
+ name,
18
+ id = name ,
19
+ label,
20
+ onChange
21
+ } = this . props ;
22
+ const { value, invalidmsg } = this . state ;
23
+ const inputProps = {
24
+ ...this . props ,
25
+ id,
26
+ value,
27
+ onChange : ( e ) => this . handleChange ( e , onChange )
28
+ } ;
29
+ return (
30
+ < div className = "pure-control-group" >
31
+ < label htmlFor = { id } > { label } </ label >
32
+ < input { ...inputProps } style = { { minWidth : '200px' } } />
33
+ {
34
+ invalidmsg ?
35
+ < span className = "pure-form-message-inline" > { invalidmsg } </ span > :
36
+ null
37
+ }
38
+ </ div >
39
+ ) ;
40
+ }
41
+ handleChange ( e , onChange ) {
42
+ this . setState ( {
43
+ value : e . target . value
44
+ } ) ;
45
+ this . validateField ( e ) ;
46
+ if ( onChange && typeof onChange === 'function' ) {
47
+ onChange ( e ) ;
48
+ }
49
+ }
50
+ validateField ( e ) {
51
+ const { target } = e ,
52
+ { validity } = target ,
53
+ { valueMissing, valid } = validity ;
54
+ let invalidmsg ;
55
+
56
+ if ( valueMissing ) {
57
+ invalidmsg = 'This is a required field' ;
58
+ } else if ( ! valid ) {
59
+ invalidmsg = this . props . invalidmsg || target . validationMessage ;
60
+ }
61
+ this . setState ( { invalidmsg } ) ;
62
+ }
61
63
}
62
-
64
+
63
65
class App extends Component {
64
66
render ( ) {
65
67
return (
66
68
< div >
67
69
< Field
68
- invalidmsg = "Field is required"
70
+ required
69
71
name = "test"
70
- label = "test field"
72
+ label = "required text field "
71
73
onChange = { ( e ) => console . log ( 'change' , e ) }
72
74
/> < br />
73
75
< Field
74
- invalidmsg = "Field is required"
76
+ type = "number"
77
+ max = { 20 }
75
78
name = "test"
76
- label = "test field"
79
+ label = "number field (20 max) "
77
80
onChange = { ( e ) => console . log ( 'change' , e ) }
78
- /> < br />
81
+ />
79
82
</ div >
80
83
)
81
84
}
0 commit comments