受控组件 和 非受控组件

简介: 之前一直没有看受控组件和非受控组件,今天抽空来 捋一下

1.前言


之前一直没有看受控组件和非受控组件,今天抽空来 捋一下


2. 基础

  1. 首先明确受控组件和非受控组件都指的是表单元素
  2. 例如 <input>、 <textarea> 和 <select>
  3. 只要牵扯到事件记住 2个箭头,保证不出错
  4. 事件创建者 在声明事件的时候用 箭头函数
  5. 事件调用者 调用的时候外层包裹 箭头函数


3. 区别

3.1 受控组件

  1. 表单组件的状态/数据只由state 维护 修改只能通过setState()来更新,
  2. 表单数据是由 React 组件来管理

3.2 非受控组件

  1. 使用ref来从 DOM 节点中获取表单数据。
  2. 表单数据将交由 DOM 节点来处理

4.  受控组件 demo

特点就是数据可控 ,完全由 React的 state管理

class HelloMsg extends Component {
            //********************** state
            constructor() {
                super()
                this.state = {
                    msg: "双向绑定"
                }
            }
            // ****************自定义函数
            //vue v-model v-bind:value = {msg} v-on:input = {}
            changeHandler = (event) => {
                this.setState({
                    msg: event.target.value
                })
            }
            // *************** render
            render() {
                let { msg } = this.state
                return (
                    <div>
                        <h1>{msg}</h1>
                        <input type="text"
                            value={msg}
                             onChange={(event) => {
                                this.changeHandler(event)
                            }} />
                            <hr />
                            <button onClick={()=>{                          console.log("state:",this.state.msg);
                            }}> 提交</button>
                    </div>
                )
            }
        }



5. 非受控组件 demo

特点 就是 ref 获取DOM 进行数据的更新

这样就不可控,因为不能进行统一管理

class HelloMsg extends Component {
            //********************** state
            constructor() {
                super()
                this.state = {
                    msg: "双向绑定"
                }
            }
            // ****************自定义函数
            //vue v-model v-bind:value = {msg} v-on:input = {}
            changeHandler = () => {
                this.setState({
                    msg: this.msgInput.value 
                })
            }
            // *************** render
            render() {
                let { msg } = this.state
                return (
                    <div>
                        <input type="text" defaultValue={msg}  />
                        <h1>{msg}</h1>
                        <input type="text"
                            ref={a => { this.msgInput = a }}
                            value={msg} onChange={() => {
                                this.changeHandler()
                            }} />
                            <hr />
                            <button onClick={()=>{
                                console.log("发请求:", this.msgInput.value);
                            }}> 提交</button>
                    </div>
                )
            }
        }


6.后记

莫听他人言,实践出真知




相关文章
|
4月前
|
存储 前端开发 JavaScript
React的受控组件与非受控组件(九)
【8月更文挑战第15天】React的受控组件与非受控组件
35 2
React的受控组件与非受控组件(九)
|
4月前
|
存储 前端开发 JavaScript
React 中受控组件和非受控组件的区别
【8月更文挑战第31天】
32 0
|
4月前
|
存储 JavaScript 前端开发
受控组件与非受控组件
【8月更文挑战第24天】
43 0
|
4月前
|
前端开发 数据安全/隐私保护
React——受控组件和非受控组件【八】
React——受控组件和非受控组件【八】
43 0
|
7月前
|
存储 前端开发 JavaScript
React的表单处理:受控组件与非受控组件深入解析
【4月更文挑战第25天】React表单处理涉及受控和非受控组件。受控组件通过状态管理表单数据,每次用户输入都触发状态更新,确保数据同步,适合实时交互但可能影响性能。非受控组件不直接管理状态,数据存储在DOM中,简化代码,适用于更新不频繁的场景,但在数据验证和同步上存在挑战。开发者应根据需求灵活选择。
|
存储
说说对受控组件和非受控组件的理解,以及应用场景?
受控组件,简单来讲,就是受我们控制的组件,组件的状态全程响应外部数据
说说对受控组件和非受控组件的理解,以及应用场景?
|
7月前
|
前端开发
React中受控组件与非受控组件的使用
React中受控组件与非受控组件的使用
|
7月前
|
存储 前端开发 JavaScript
react受控组件与非受控组件
react受控组件与非受控组件
54 0
|
前端开发 JavaScript
react中受控组件与非受控组件
react中受控组件与非受控组件
59 0
|
存储 JavaScript 前端开发
对受控组件和非受控组件的理解,以及应用场景?
对受控组件和非受控组件的理解,以及应用场景?
98 0