You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中带value的文本输入框为何只读?defaultValue与value有何区别?

React输入框只读问题及defaultValue/value区别

先看你编写的组件代码:

function CreateTextInput({ id, placeholder, defaultValue, value }) {    
        return (
            <input
                type="text"
                name={id}
                placeholder={placeholder}
                defaultValue={defaultValue}
                value={value}
            //onChange={onChange}
            />
        );
    }

调用代码:

<CreateTextInput id="fieldID1" defaultValue="fieldDefaultValue" value="fieldValue" />

1. 同时设置value和defaultValue导致输入框只读是正常行为

当你给input设置value属性但未配套onChange处理函数时,输入框会变成受控组件——其值完全由你传入的value决定。由于没有编写更新value的逻辑,输入框的值会固定在你传入的fieldValue上,自然无法编辑。另外,value的优先级高于defaultValue,同时传递时defaultValue会被直接忽略,相当于只设置了value。

2. defaultValue和value的核心区别

  • defaultValue:属于非受控组件用法,仅在组件首次渲染时设置输入框的初始值,之后输入框的值由浏览器DOM自行管理,用户输入会直接修改DOM的值,无需React状态同步。适合不需要实时监控或控制输入内容的场景。
  • value:属于受控组件用法,输入框的值完全由React状态控制,必须配合onChange事件更新状态,进而同步更新value的值,用户输入才能生效。适合需要实时验证输入、格式化内容,或需要把输入值同步到其他组件的场景。

修正方案

方案一:改用受控组件

补充onChange属性,将输入值同步到父组件状态中:

function CreateTextInput({ id, placeholder, value, onChange }) {    
  return (
    <input
      type="text"
      name={id}
      placeholder={placeholder}
      value={value}
      onChange={(e) => onChange(e.target.value)}
    />
  );
}

// 父组件调用示例
// import { useState } from 'react';
// const [inputValue, setInputValue] = useState("fieldValue");
// <CreateTextInput id="fieldID1" value={inputValue} onChange={setInputValue} />

方案二:改用非受控组件

仅保留defaultValue,移除value:

function CreateTextInput({ id, placeholder, defaultValue }) {    
  return (
    <input
      type="text"
      name={id}
      placeholder={placeholder}
      defaultValue={defaultValue}
    />
  );
}

// 调用方式
// <CreateTextInput id="fieldID1" defaultValue="fieldDefaultValue" />

内容的提问来源于stack exchange,提问作者CheeseNWine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:17:41