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

React中如何实现两个相互依赖的输入表单字段的自动正确更新

问题原因
  • 两个输入框均为React受控组件,value属性与对应的state变量强绑定:data1对应第一个输入框,data2对应第二个输入框。你当前的输入事件逻辑中,修改第一个输入时仅更新了data2,没有同步更新data1,修改第二个输入时仅更新了data1,没有同步更新data2,因此当前操作的输入框内容无法同步你输入的内容。
  • onChange事件绑定在input的父div上属于不合理的写法,事件直接绑定到input元素更符合React的设计逻辑,也能避免不必要的事件冒泡问题。
修正后实现代码
import { useState } from "react";

export default function App() {
  const [data1, setData1] = useState(0);
  const [data2, setData2] = useState(0);

  const inputEvent1 = (e) => {
    const currentVal = e.target.value;
    // 先更新当前输入对应的state
    setData1(currentVal);
    // 再计算更新另一个输入的state
    setData2((currentVal / 2).toString());
  };

  const inputEvent2 = (e) => {
    const currentVal = e.target.value;
    // 先更新当前输入对应的state
    setData2(currentVal);
    // 再计算更新另一个输入的state
    setData1((currentVal * 2).toString());
  };

  return (
    <form className="a">
      <div className="b">
        <h1 className="c">Data Changer</h1>
        <div className="">
          <div className="d">
            <p>Enter Data1:</p>
            <input
              name="dataField1"
              type="text"
              className="input"
              placeholder="Data1"
              value={data1.toString()}
              onChange={inputEvent1}
            />
          </div>
          <div className="e">
            <p>Enter Data2:</p>
            <input
              name="dataField2"
              type="text"
              className="input"
              placeholder="Data2"
              value={data2.toString()}
              onChange={inputEvent2}
            />
          </div>
        </div>
      </div>
    </form>
  );
}
补充说明

如果需要处理非数字输入的异常场景,可以在计算前添加数值合法性校验,避免出现NaN的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:48:00