找回密码
 立即注册
首页 编程领域 编程板块 react可控组件和不可控组件

前端 react可控组件和不可控组件

2023-3-10 14:32:21 评论(0)
在React中的input标签是有些小坑的,input本身就有自己的缓存机制,然后React的State也有缓存机制。这两种缓存机制我们在编码中是要进行取舍的。将input中的value绑定到state的React组件就是可控组件,反之则是不可控组件。
先看一个不可控的input代码
  1. //测试效果用
  2. import React, { Component } from 'react';

  3. class MyForm extends Component {
  4.     constructor(props) {
  5.         //super指代父类的实例(即父类的this对象)
  6.         super(props);
  7.         this.state = {
  8.             username: '',
  9.             gender: 'man',
  10.             checked: true,
  11.             value: 'ferrysoul'
  12.          };
  13.     }
  14.     getInitialState(){
  15.     return { value: 'ferrysoul' }
  16. };
  17. handleChange(event) {
  18.     this.setState({ value: event.target.value });
  19.     console.log(this.state.value)
  20. };
  21. render() {
  22.     return (
复制代码
不可控的input无法改变值,不管你怎么敲击键盘输入,input中的数值不会发生任何改变,打开控制台会有一个报错信息,

原因是:
因为input标签,没有定义onChange 但是提供了value属性。React会抛出警告,并将元素设置为只读。
如果目标是只读字段,最好使用readOnly属性明确加以定义。这不仅会消除警告,也会确保代码的可读性。
解决:
可以添加readOnly={true} ,或者直接添加readOnly属性,而不设置值,React会默认将该属性的值设为true。
一。设置onchang,变成可控input
(1)直接在函数后面.bind(this)

  1. //测试效果用
  2. import React, { Component } from 'react';

  3. class MyForm extends Component {
  4.     constructor(props) {
  5.         //super指代父类的实例(即父类的this对象)
  6.         super(props);
  7.         this.state = {
  8.             username: '',
  9.             gender: 'man',
  10.             checked: true,
  11.             value: 'ferrysoul'
  12.          };
  13.     }
  14.     getInitialState(){
  15.     return { value: 'ferrysoul' }
  16. };
  17. handleChange(event) {
  18.     console.log(event.target.value)
  19.     this.setState({ value: event.target.value });
  20.     console.log(this.state.value)
  21. };
  22. render() {
  23.     return (
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

使用道具 举报

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们(3513994353@qq.com)。
您需要登录后才可以回帖 登录 | 立即注册
楼主
宝宝巴士

关注0

粉丝0

帖子15

最新动态