所有分类
  • 所有分类
  • 后端开发

React基础知识:约束性组件( controlled component)与非约束性组件( uncontrolled component)有什么区别?

今天,让我们谈谈React的基本知识:约束组件( controlled component)非约束组件( uncontrolled  component),他们有什么区别?

在 在React中,组件负责控制和管理自己的状态。

如果HTML中的表单元素是( input、 select、 textarea等。)添加到组件中。当用户与表单交互时,它涉及到表单数据的存储。组件根据表单数据的存储位置分为约东部组件和非约东部组件。

约束性组件( controlled component)就是由 React控制的组件,也就是说,表单元素的数据存储在组件内部的状态下,表单的显示由组件决定。

如下所示, username不存储在DOM元素中,而是存储在组件状态中。每次更新 username时,需要调用 setstate更新状态;每次获得 username的值必须获得组件状态值。

class App extends Component {
    ///初始状态
    constructor ( props ) {
        super ( props )
        this .state = {
         username:“课前端网”
        }
    }
    ///检查结果
    showResult ( ) {
        ///获取数据获取状态值
        console. log ( this .state. username )
    }
    changeUsername (e) {
        ///获取原生方法
        var value =e .target .value
        ///更新前,脏值检测可以进行
        ///更新状态
        this .setState ( {
            username:value
        } )
    }
    //渲染组件
    render( ) {
        ///返回虚拟DOM 
        return (
        <div>
        <p>
        {/*输入框绑定va1ue*/}
        <input type="text" onChange={ this.changeUsername .bind (this ) }
        value= { this .state.username }/>
        </p>
        <p>
        < button onClick={this.showResult.bind (this)}>查看结果</ button>
        </p>
        </div>
        )
    }
}

非约束组件( uncontrolled component)它是指表单元素的数据由元素本身存储和处理,而不是通过 React组件。如何呈现表单取决于表单元素本身。

如下所示,表单的值不存储在组件状态中,而是存储在表单元素中。当需要修改表单数据时,可以直接输入表单。有时元素可以获得,然后手动修改它的值。获取表单数据时,首先获取表单元素,然后通过表单元素获取元素值。

注:为便于在组件中获取表单元素,通常为元素设置ref属性,并通过refs属性在组件内获取相应的DOM元素。

class App extends Component {
///检查结果
showResult ( ) {
//获取值
console. log(this. refs. username .value)
///修改值,修改元素本身的值
this.refs.username.value=“专业前端学习平台”
//渲染组件
render ( ) {
///返回虚拟DOM 
return (
<div>
<p>
{/*非约束组件,通过表单元素 defaltvalue定义*/}
< input type="text"  ref=" username"  defaultvalue=“课前端网”/>
</p>
<p>
< button onClick={this. showResult.bind ( this ) }>查看结果</button>
</p>
</div>
 )
  }
}

虽然非约东性组件通常更容易实现,DOM元素可以通过refs直接获得,其值也可以获得,但是 React建议使用约束组件。主要原因是约东组件支持即时字段验证,允许有条件禁用/启用按钮、强制输入格式等。

原文链接:https://www.icz.com/technicalinformation/web/seo/2023/05/9551.html,转载请注明出处~~~
0
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?