index.js
1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import React from 'react'
import './index.less'
class Input extends React.PureComponent {
static defaultProps = {
disabled: false,
type: 'text',
}
handleChange = (e) => {
const {
onChange,
index,
} = this.props;
if (onChange) {
onChange(e, index);
};
}
handleBlur = (e) => {
const {
onBlur,
index,
} = this.props;
if (onBlur) {
onBlur(e, index);
};
}
fixControlledValue = (value) => {
if (typeof value === 'undefined' || value === null) {
return '';
};
return value;
}
render() {
const {
type,
name,
width,
margin,
style,
maxLength,
rows,
disabled,
...otherProps
} = this.props;
/*
* defaultValue只会在第一次渲染有效
* defaultValue和value尽量不共存,如果共存的话value将会覆盖defaultValue
* 在共存的情况下,如果value值为undefined或者null,会被defaultValue覆盖
*/
if ('value' in otherProps) {
otherProps.value = this.fixControlledValue(otherProps.value);
delete otherProps.defaultValue;
};
return (
<div
className="wowjoy-input"
style={{ width, margin }}>
{type === 'textarea' ? (
<textarea {...otherProps}
rows={rows}
name={name}
disabled={disabled}
onChange={this.handleChange}
style={style}
className="wowjoy-textarea__inner"
/>
) : (
<input {...otherProps}
type={type || 'text'}
name={name}
maxLength={maxLength}
disabled={disabled}
onChange={this.handleChange}
onBlur={this.handleBlur}
style={style}
className="wowjoy-input__inner"
/>
)}
</div>
);
}
}
export default Input;