react-表单

7/19/2020 react
  • 受控组件
    • input textarea select 用 value
    • checkbox radio 用 checked

# 受控组件--input框自己的状态被React组件状态控制


实现步骤 以获取文本框的值为例,受控组件的使用步骤如下:

  1. 在组件的state中声明一个组件的状态数据
  2. 将状态数据设置为input标签元素的value属性的值
  3. 为input添加change事件
  4. 在事件处理程序中,通过事件对象e获取到当前文本框的值(即用户当前输入的值)
  5. 调用setState方法,将文本框的值作为state状态的最新值
import React from "react";
class FormComponent extends React.Component {
    constructor() {
        super();
        this.state = {
            inputVal: "",
            textareaVal: "",
            selectVal: "",
            checkboxVal: true,
            radioVal: ''
        };
    }
    handleChangeInput = (e) => {
        this.setState({
            inputVal: e.target.value,
        });
    };
    handleChangeTextarea = (e) => {
        this.setState({
            textareaVal: e.target.value,
        });
    };

    handelChangeSelect = (e) => {
        this.setState({
            selectVal: e.target.value,
        });
    };

    handelChangeCheckbox = (e) => {
        this.setState({
            checkboxVal: !this.state.checkboxVal,
        });
    };

    handelChangeRadio = (e) => {
        this.setState({
            radioVal: e.target.value
        })
    }

    render() {
        return (
            <form>
                <h1>{this.state.inputVal}</h1>
                <div>
                    <label htmlFor="inputName">姓名</label>
                    <input
                        id="inputName"
                        value={this.state.inputVal}
                        onChange={this.handleChangeInput}
                    />
                </div>
                <h1>{this.state.textareaVal}</h1>
                <div>
                    <label htmlFor="textaraName">信息</label>
                    <textarea
                        id="textaraName"
                        value={this.state.textareaVal}
                        onChange={this.handleChangeTextarea}
                    />
                </div>
                <h1>{this.state.selectVal}</h1>
                <div>
                    <label>选择</label>
                    <select
                        value={this.state.selectVal}
                        onChange={this.handelChangeSelect}
                    >
                        <option value="zhangsan">张三</option>
                        <option value="lisi">李四</option>
                        <option value="wangwu">王五</option>
                    </select>
                </div>
                <h1>{this.state.checkboxVal.toString()}</h1>
                <div>
                    <label>复选</label>
                    <input
                        type="checkbox"
                        checked={this.state.checkboxVal}
                        onChange={this.handelChangeCheckbox}
                    />
                </div>
                <h1>{this.state.radioVal}</h1>
                <div>
                    <label>单选  </label><input
                        type="radio"
                        name="gender"
                        value='男'
                        checked={this.state.radioVal === '男'}
                        onChange={this.handelChangeRadio}
                    /><input
                        type="radio"
                        name="gender"
                        value='女'
                        checked={this.state.radioVal === '女'}
                        onChange={this.handelChangeRadio}
                    />
                </div>
            </form>
        );
    }
}
export const FormDemo = FormComponent;

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
更新: 8/19/2022, 2:56:36 PM