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

React中useState绑定的input输入变更时state不更新问题

问题根因

你这段代码的核心问题是直接修改了原state的引用,没有返回全新的state对象,React对state的更新采用浅比较引用的逻辑,只要引用地址没有变化,就会判定state没有变更,不会触发组件重渲染。
你写的var newState = state只是把原数组的引用赋值给了newState变量,后续修改数组内对象的value属性、最终返回newState,本质上返回的还是原来的state数组,因此React不会触发更新。

修复方案

直接修改updateAnswerValue函数,遵循state不可变原则,返回全新的数组对象,对应位置的对象也需要做浅拷贝再修改属性:

export const updateAnswerValue = ({ event, setProceduralAnswers, answer_index }) => {
    setProceduralAnswers(state => {
        // 浅拷贝原数组,得到新的数组引用
        const newState = [...state]
        // 对应位置的对象也做浅拷贝,再修改value属性
        newState[answer_index] = {
            ...newState[answer_index],
            value: event.target.value
        }
        // 返回全新的数组
        return newState
    })
}
可选优化点
  • 不需要用filter查找对应下标的元素,直接通过数组下标访问即可,性能更高
  • 后续所有state修改都遵循不可变原则,只要修改state就返回全新的引用,不要直接修改原state的任何属性
  • 如果数组元素后续会新增更多属性,当前的浅拷贝写法也可以兼容,无需调整逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:18:04