【 React 】受控组件和非受控组件的理解?应用场景?

本文详细介绍了React中的受控组件和非受控组件的区别,包括受控组件如何通过state和onChange事件处理用户输入,以及非受控组件如何利用ref获取DOM值。还讨论了在实际场景中选择它们的优缺点和应用案例。
摘要由CSDN通过智能技术生成

1 受控组件

受控组件,简单来讲,就是受我们控制的组件,组件的状态全程响应外部数据

class InputComponent extends React.Component{
    constructor(props){
        super(props);
        this.state={username:'superrui'}
    }
    render(){
        return <input name="username" value={this.state.username}/>
    }
}

这时候当我们输入框输入内容的时候 ,会发现输入的内容无法显示出来,也就是input 标签是一个刻可读的状态
这是因为value被this.state.usename所控制。当用户输入新的内容时,this.state.username并不会自动更新,这样的话input内的内容也就不会变了
如果想要接触被控制,可以为input标签设置onChange事件,输入的时候触发事件函数,在函数内部实现state更新,从而懂啊组织input框的内容改变
因此受控组件我们一般需要初始状态和一个状态更新事件函数

2 非受控组件

非受控组件,就是不受我们控制的组件

一般情况是在初始化的时候受外部数据,然后自己在内部存储自身状态
当需要时,可以使用ref查询DOM并查处其当前值,

//不受控组件
import React,{Component} from 'react'
export class unControl extends Component{
    constructor(props){
        super(props)
        this.inputRef=React.createRef()
    }
    handleSubmit=(e)=>{
        console.log('input内的值为',this.inputRef.current.value);
        e.preventDefault();
    }
    render(){
        return (
            <form onSubmit={e=>this.handleSubmit(e)}>
                <input defaultValue="superrui" ref={this.inputRef}/>
                <input type='submit' value="提交"/>
            </form>
        )
    }
}

3 应用场景

大部分时候推荐使用受控组件来实现表单,因为在受控组件中,表单数据由React组件负责处理
如果选择非受控组件的话,控制能力较弱,表单数据就由DOM本身处理,但更加方便快捷,代码量少
不受控组件特征:一次性取值(如提交时),提交时验证
受控组件特征:一次性取值(如提交时),提交时验证,即时现场验证,有条件的禁用提交按钮,强制输入格式,一个数据的多个输入,动态输入

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小超人rui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值