React中的受控组件与非受控组件

受控组件与非受控组件

受控组件

组件(input, select)的状态与state的值绑定,组件的状态全程响应外部数据

jsx 复制代码
class TestComponent extends React.Component {
  constructor (props) {
    super(props);
    this.state = { username: 'lindaidai' };
  }
  render () {
    return <input name="username" value={this.state.username} />
  }
}

这时候当我们在输入框输入内容的时候,会发现输入的内容并无法显示出来,也就是input标签是一个可读的状态

这是因为valuethis.state.username所控制住。当用户输入新的内容时,this.state.username并不会自动更新,这样的话input内的内容也就不会变了

如果想要解除被控制,可以为input标签设置onChange事件,输入的时候触发事件函数,在函数内部实现state的更新,从而导致input框的内容页发现改变

因此,受控组件我们一般需要初始状态和一个状态更新事件函数。

非受控组件

一般情况是在初始化的时候接受外部数据,然后自己在内部存储其自身状态

即组件的状态不受React控制的组件

当需要时,可以使用ref 查询 DOM 并查找其当前值,如下:

jsx 复制代码
import React, { Component } from 'react';

export class UnControll 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="lindaidai" ref={this.inputRef} />
        <input type="submit" value="提交" />
      </form>
    )
  }
}

我们一般只有在一次性取值时才推荐使用非受控组件,比如提交表单的所有数据,否则大多数情况下都推荐使用受控组件

相关推荐
仰泳之鹅2 分钟前
【杂谈】C语言中的链接属性、声明周期以及static关键字
java·c语言·前端
2501_940315266 分钟前
【无标题】(leetcode933)最近的请求次数
java·前端·javascript
每天吃饭的羊17 分钟前
LeetCode 第一题
前端
Ahtacca17 分钟前
拒绝重复造轮子:利用自定义注解封装POI,实现Java通用Excel解析
java·javascript·vue·excel
入门级前端开发19 分钟前
vue集成xlsl实现前端表格导入导出
前端·javascript·vue.js
2501_9445215923 分钟前
Flutter for OpenHarmony 微动漫App实战:列表项组件实现
android·开发语言·javascript·flutter·ecmascript
小二·23 分钟前
Python Web 开发进阶实战:联邦学习平台 —— 在 Flask + Vue 中构建隐私保护的分布式 AI 训练系统
前端·python·flask
弓.长.24 分钟前
小白基础入门 React Native 鸿蒙跨平台开发:实现九宫格图片选择
react native·react.js·harmonyos
一人の梅雨29 分钟前
中国制造网商品详情接口进阶实战:跨境场景下的差异化适配与问题攻坚
java·前端·javascript
无知的小菜鸡35 分钟前
React:使用高阶组件实现vue中的路由守卫功能
前端·vue.js·react.js