react受控组件和非受控组件

react受控组件和非受控组件

受控组件:

先看例子:

import React, { Component } from 'react'

export default class ShouKong extends Component {
  constructor() {
    super()
    this.state = {
      value: '1'
    }
  }
  render() {
    const { value } = this.state
    return (
      <div>
        {value}
        //注意这里的onChange 一定要通过onChange来触发数据改动的事件
        //一定要写
        <input type="text" value={value} onChange={this.handleChangeValue} />
      </div>
    )
  }

  handleChangeValue = (e) => {
      //通过这个  e  元素就可以拿到当前表单元素
    this.setState({
      value: e.target.value
    })
  }
}

受控组件就是指这个input 组件,我们要经常使用表单来搜集用户输入,还有比如说input , select,textearea等这些元素都要绑定一个change事件,当表单的状态发生变化,就会触发onChange事件更新组件的state。这种组件在React中被称为受控组件,受控组件,在我看来就像是vue当中的双向绑定,因为在react当中的数据绑定是单向的,但是像这样子的一个处理,就可以使数据发生改变的时候,视图也跟着改变.

当触发改变的事件之后,react中的改变state里面的数据的方式和微信小程序的方式是一样的 ,都是 this.setState({’’})的方式来改变的.

非受控组件:

在非受控组件中,我们可以使用一个ref来从DOM获得表单值。而不是为每个状态更新编写一个事件处理程序。

export default class FeiShouKong extends Component {
  constructor() {
    super()
    // 16.3 之后建议使用的 
    this.inputRef = createRef()
  }
  render() {
    // console.log()
    return (
      <div>
        <input type="text" ref={this.inputRef} onChange={this.handleChangeValue} />
      </div>
    )
  }

  handleChangeValue = () => {
    // 老版本方式  
    // console.log(this.refs.inputRef.value)
    console.log(this.inputRef.current.value)
  }
}

由于非受控组件将真实数据保存在 DOM 中,因此在使用非受控组件时,更容易同时集成 React 和非 React 代码。如果你想快速而随性,这样做可以减小代码量。否则,你应该使用受控组件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值