# 表单 本章主要包含以下内容: - 受控组件 - 非受控组件 ## 受控组件 无论是学习 *Vue*,还是 *React*,最重要的是要转换思想,这一步非常重要,往往也比较困难。 在以前 *jQuery* 时代,开发人员需要获取到 *DOM* 节点,然后进行操作。而在现代前端开发中,采用的是 *MVVM* 的模式,将视图和视图模型进行绑定,视图模型的改变,会自然的带来视图的改变。开发人员需要专注在视图模型上面。 因此,这里所谓的受控组件,本质上其实就是将表单中的控件和视图模型(状态)进行绑定,之后都是针对状态进行操作。 下面,我们来看一些具体的案例: - 一个基本的受控组件 ```react import React from "react"; // 类组件 class App extends React.Component { state = { value : "" } handleChange = (e) => { this.setState({ value : e.target.value }) } clickHandle = () => { // 提交整个表单 console.log(`你要提交的内容为:${this.state.value}`); } render() { return (
) } } export default App; ``` - 对用户输入的内容进行限制 ```react import React from "react"; // 类组件 class App extends React.Component { state = { value1 : "", value2 : "" } handleChange = (e) => { const name = e.target.name; switch(name){ case "one": { // 用户输入的是第一个输入框 // 只能输入大写 this.setState({ value1 : e.target.value.toUpperCase() }) break; } case "two":{ // 用户输入的是第二个输入框 // 只能输入数字 const newValue = e.target.value.split("").map(item=>{ if(!isNaN(item)){ return item } }).join(""); this.setState({ value2 : newValue }) break; } } } clickHandle = () => { // 提交整个表单 console.log(`你要提交的内容为:${this.state.value}`); } render() { return (
) } } export default App; ``` - 文本域 ```react import React from "react"; // 类组件 class App extends React.Component { state = { value : "" } handleChange = (e) => { this.setState({ value : e.target.value }) } clickHandle = () => { // 提交整个表单 console.log(`你要提交的内容为:${this.state.value}`); } render() { return (