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

React TypeScript中如何实现类似document.getElementById()获取输入框值?

在React TypeScript中获取搜索框输入值并转为小写

问题原因

你直接通过document.getElementById()操作DOM的方式不符合React的数据流逻辑,且可能因React虚拟DOM与真实DOM的更新时机差异,导致无法获取到最新输入值,所以console输出为空。React推荐通过受控组件或Ref处理表单输入,而非直接操作DOM。

解决方案1:使用受控组件(推荐)

受控组件通过React State管理输入值,onChange触发时直接从事件对象中取值,无需操作DOM:

1. 初始化组件状态

在类组件的constructor中添加状态存储搜索文本:

constructor(props) {
  super(props);
  this.state = {
    searchText: ''
  };
  // 绑定this,确保input函数中this指向组件实例
  this.input = this.input.bind(this);
}

2. 修改input处理函数

直接通过事件参数获取输入值,转为小写后存入State:

input(event: React.ChangeEvent<HTMLInputElement>) {
  const defaultText = event.target.value;
  console.log(defaultText);
  const lowerCaseText = defaultText.toLowerCase();
  console.log(lowerCaseText);
  // 将小写文本存入State,后续可直接从State取用
  this.setState({ searchText: lowerCaseText });
}

3. 更新input元素

为input添加value属性绑定State,实现双向数据绑定:

<Row>
  <input 
    type="search" 
    id="form1" 
    onChange={this.input} 
    placeholder="Søk etter oppskrift.."
    value={this.state.searchText}
  />
</Row>

解决方案2:使用Ref(非受控组件)

若不想用State管理,也可通过React Ref获取DOM元素:

1. 创建Ref

在类组件中定义Ref:

form1Ref = React.createRef<HTMLInputElement>();

2. 绑定Ref到input元素

将Ref关联到input:

<Row>
  <input 
    type="search" 
    ref={this.form1Ref} 
    onChange={this.input} 
    placeholder="Søk etter oppskrift.."
  />
</Row>

3. 通过Ref获取输入值

在input函数中从Ref读取值:

input() {
  // 先判断Ref是否已挂载到DOM
  if (this.form1Ref.current) {
    const defaultText = this.form1Ref.current.value;
    console.log(defaultText);
    const lowerCaseText = defaultText.toLowerCase();
    console.log(lowerCaseText);
  }
}

总结

优先选择受控组件方案,它更符合React状态管理理念,能避免直接操作DOM带来的潜在问题。后续需使用搜索文本时,直接从this.state.searchText获取即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:45:40