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

React表单预填充异常:输入框锁定、textarea无法回填问题

问题根因

你的代码存在两个核心问题,直接导致预填充逻辑异常:

  • useEffect未配置依赖数组,默认会在组件每一次重渲染后都执行。你每次在输入框敲字触发onChange更新状态时,组件重渲染就会立刻执行useEffect里的setName,把值重置回props传入的初始name,所以输入框看起来被锁死无法编辑。
  • textarea标签没有绑定value属性和methodStepsList状态关联,属于非受控组件,你就算通过setMethodStepsList更新了状态,文本域也不会同步显示对应值,自然无法完成预填充。
修复步骤
  1. 给useEffect添加正确的依赖项,同时增加空值判断,避免新建食谱场景下props.data为undefined时报错:
useEffect(() => {
  // 新建场景无传入数据时直接跳过赋值逻辑
  if (!props.data) return
  setName(props.data.name)
  setMethodStepsList(props.data.method)
}, [props.data]) // 仅在传入的食谱数据变化时执行一次赋值
  1. 给textarea补充value绑定,让它成为受控组件,和状态双向同步:
<textarea
  rows="5"
  name="step_instructions"
  placeholder="Method will be split up based on new lines"
  value={methodStepsList}
  onChange={(e) => handleMethodChange(e)}
></textarea>
  1. 校验handleMethodChange逻辑,确保输入时能正确同步状态,参考基础写法:
const handleMethodChange = (e) => {
  // 同步输入内容到状态
  setMethodStepsList(e.target.value)
  // 你原有的按换行拆分步骤的逻辑可保留在此处
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:12:31