reac笔记_13 form表单元素中 input/defaultValue + useState/useRef

文章详细对比了原生HTML中的input元素value属性及其行为,以及在React中受控组件和非受控组件的区别,重点讲解了defaultValue和value属性的使用场景,以及如何在React中处理input元素的值变化。通过示例代码展示了React中useState和useRef在不同情况下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原生html元素

原生html是不存在双向绑定的!以input标签举例说明

input属性
  • value:当前表单元素的值
  • onchange:失去焦点且值发生改变时触发
示例1
<input type="text" value="111">

上述代码在页面显示结果如下:
在这里插入图片描述

示例2

在案例1上稍作修改

  <input id='inputbox' type='text'/>
  <button id="btnbox">点击修改value值</button>
  <script>
    const inputele = document.getElementById('inputbox')
    const btnele = document.getElementById('btnbox')
    // 赋值-在页面显示如案例1
    let inputvalue = '111'
    inputele.value = inputvalue

    // 修改inputvalue值 -> 通过代码修改
    // 页面没有发生变化 -> 不会重新渲染
    btnele.onclick = function(){
   
      inputvalue = '222'
      console.log(inputvalue) // 222
    }

    //修改value值为11111 -> 在页面修改元素的value属性值
    // -> 页面变化,但是inputvalue变量值并没有发生变化
    inputele.onchange = function(e){
   
      console.log(e.targe.value) // 11111
      console.log(inputvalue) // 111
    }
  </script>
  • 通过上述案例可以看出页面发生改变不会更改变量的值,变量的值改变不会让页面变化 -> 原生input标签的value属性不存在双向绑定
  • 上述代码的赋值
     let inputvalue = '111'
     inputele.value = inputvalue
    
    其实本质就是
    inputele.value = '111'
    
    赋值之后就和原来的 inputvalue属性不存在关联关系了,相当于赋了一个默认值,因此 -> 修改inputvalue属性值不会影响元素的value属性,修改value属性也不会影响inputvalue属性值。

react中

在react中也不存在双向绑定!每次更新页面和值都需要我们自己去调用指定的api来触发。

受控组件与非受控组件

react中form表单元素分为受控组件与非受控组件
在这里插入图片描述

属性

react中的input

  • defaultValue属性:默认值
  • value属性:当前表单元素的值
  • onChange: 表单元素值改变时触发
error - input标签value属性使用
  • 今天想添加一个input标签,默认值为222,代码如下:
    function Mycomponent(){
         
      return (
        <ul>
          <li><input value=222/></li>
        </ul>
      )
    }
    ReactDOM.render(<Mycomponent />, document.getElementById('test'))
    
  • 报错如下
    在这里插入图片描述
    • 错误: 在react中input标签存在value元素则表示元素为受控组件,需要添加onChange方法
    • 原因: 在react中 没有 添加onChange方法的input标签为只读的,不能添加value 属性。 若是想添加默认值可以 使用 defaultValue属性
  • 修正
    function Mycomponent(){
         
      return (
        <ul>
          <li><input defaultValue='222' /></li>
        </ul>
      )
    }
    ReactDOM.render(<Mycomponent />, document.getElementById('test'))
    
示例 - useState

在这里插入图片描述
案例1:如上图,表格数据,每次重新获取之后都要更新组件页面,因此需要使用useState hook定义数据

import {
    useState, useEffect } from "react"
import {
    Table } from 'antd' 
export default function UseDefaultValue (){
   
  const columns = [
    {
   
      title: '姓名',
      dataIndex: 'name',
      key: 'name',
    },
    {
   
      title: '年龄',
      dataIndex: 'age',
      key: 'age',
    },
    {
   
      title: '住址',
      dataIndex: 'address',
      key: 'address',
    },
  ]  
  const [data,setData] = useState({
   }) // 存储表格数据
  function getList(){
   
    // 模拟接口获取表格数据
    setTimeout(()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值