首页 > 其他分享 >react受控组件和非受控组件的区别

react受控组件和非受控组件的区别

时间:2024-05-14 14:53:02浏览次数:12  
标签:受控 react DOM value React props 组件

在 React 中,组件可以分为受控组件和非受控组件,它们之间的主要区别在于组件内部对数据的控制方式。

  1. 受控组件:

    • 受控组件的值受 React 组件的状态(state)控制。
    • 组件的值由 React 组件的 state 属性管理,并通过 props 将其传递给组件。
    • 当用户与组件交互时,例如输入表单元素的值发生变化,React 会更新组件的状态,并将新的值传递给组件。
    • 示例:一个 <input> 元素的值由 React state 控制,通过 onChange 事件来更新状态。
    class ControlledComponent extends React.Component {
      constructor(props) {
        super(props);
        this.state = { value: '' };
      }
    
      handleChange = (event) => {
        this.setState({ value: event.target.value });
      }
    
      render() {
        return (
          <input type="text" value={this.state.value} onChange={this.handleChange} />
        );
      }
    }
    
  2. 非受控组件:

    • 非受控组件的值不受 React 组件状态的控制,而是由 DOM 元素自身来控制。
    • 组件的值由 DOM 元素直接管理,React 只负责对其进行引用。
    • 当用户与组件交互时,React 不会介入值的变化,而是直接由 DOM 元素自身来管理。
    • 示例:使用 ref 属性直接引用 <input> 元素,从而获取其值。
    class UncontrolledComponent extends React.Component {
      constructor(props) {
        super(props);
        this.inputRef = React.createRef();
      }
    
      handleClick = () => {
        console.log('Input value:', this.inputRef.current.value);
      }
    
      render() {
        return (
          <div>
            <input type="text" ref={this.inputRef} />
            <button onClick={this.handleClick}>Get Value</button>
          </div>
        );
      }
    }
    

总的来说,受控组件适用于需要 React 控制状态的情况,而非受控组件适用于需要直接操作 DOM 的情况。选择何种方式取决于具体的需求和项目的架构。

标签:受控,react,DOM,value,React,props,组件
From: https://www.cnblogs.com/ygyy/p/18191280

相关文章

  • 玩转创想三维 K1 系列主板之二:编译 MCU 固件,恢复裁剪组件
    前言原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎交流指正。文章如有更新请访问DFRobot社区及cnblogs博客园,前者内容较全,后者排版及阅读体验更佳。本文是摸索创想三维K1系列软硬件系统的一些内容分享。最近创想三维的工作人员联系了我,希望接下来能加快网卡直连......
  • Springboot+React实现Minio文件分片上传、断点续传
    前言本文采用前后端结合,后端给前端每个分片的上传临时凭证,前端请求临时url,通过后端间接的去上传分片。其实无关乎vue或者react,思路都是一样的,逻辑也全都是js写的,跟模板语法或者jsx也没关系,仅仅是赋值不一样而已。前端:React+TypeScript+Antd+axios+spark-md5+p-......
  • 自创tab组件的高亮选项,如何滑动到页面中间?
    constscrollToCenter=(element)=>{consttabsContainer=document.getElementById('scrollView');//scrollView滚动的tab父元素consttabsContainerWidth=tabsContainer.offsetWidth;constelementLeft=element.offsetLeft;constelem......
  • React基于RBAC的权限控制
    简单实现基于RBAC(Role-BasedAccessControl,基于角色的访问控制)的权限控制,可以通过定义角色和权限,然后将权限分配给不同的角色来实现。用户根据其角色获得相应的权限,进而访问特定的路由、页面组件或者操作。以下是在React应用中实现RBAC的一个简单示例。这个示例包括了路由保护......
  • 【vue3入门】-【22】 组件生命周期
    组件生命周期每个Vue组件实例在创建是都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模版,挂载实例到DOM,以及在数据改变时更新DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码。生命周期函数都是会自己执行app.vue<template>......
  • vue2使用elementUI组件el-tooltip指定元素进行提示信息(图标显示信息)
     <el-table-columnprop="operation"label="操作"borderwidth="200px"><templateslot-scope="scope"><divclass="operation-icons"><!......
  • 免费的集成组件有哪些?
    集成组件是指将多个软件或系统进行整合,以实现更高效、更可靠的数据处理和管理。在数据管理和分析领域,集成组件是不可或缺的工具之一。在当今高度信息化的时代,集成组件在各行各业的应用中扮演着举足轻重的角色。集成组件能够将不同来源的数据整合到一起,实现数据的统一管理和利用,从......
  • react native 项目使用 Xcode 打包上架 App Store
    一、创建证书、标识符和描述文件等:1.前提条件可正常运行和打包的代码、Apple开发者账号点击注册Apple开发者账号注册完进入页面可以看到证书、标识符和描述文件创建入口2.创建AppID点击Identifiers旁边的加号选择AppIDs,点击Continue。选择App,点击Conti......
  • 推荐一款Windows兼容的开源操作系统-ReactOS
    ReactOS介绍ReactOS™isanOpenSourceefforttodevelopaqualityoperatingsystemthatiscompatiblewithapplicationsanddriverswrittenfortheMicrosoft®Windows™NTfamilyofoperatingsystems(NT4,2000,XP,2003,Vista,7).TheReactOSproject,al......
  • npm install 报错 ---》npm ERR! request to https://registry.npmjs.org/react faile
    1、npminstall报错E:\wsg\AWC_TEST\stage>npminstallreactreact-domnpmERR!codeCERT_NOT_YET_VALIDnpmERR!errnoCERT_NOT_YET_VALIDnpmERR!requesttohttps://registry.npmjs.org/reactfailed,reason:certificateisnotyetvalidnpmERR!Acomplete......