为什么React组件重渲染时input输入的值不会变回初始空值?
问题解答
1. useState的状态不会随组件重渲染重置
useState("") 里的初始值 "" 仅在组件第一次挂载渲染时生效一次,后续因state变更触发的重渲染不会重新初始化状态。
React内部会为每个组件实例单独维护独立的状态存储,你每次调用 setValue 修改状态时,React都会更新这份存储里对应的状态值。每次组件重渲染执行函数时,useState 直接返回存储中最新的状态值,不会再读取初始的空值。
2. 输入框的值始终和最新状态/原生输入同步
你当前代码里的input没有显式绑定 value 属性,属于非受控组件,输入框的内容由浏览器原生维护,输入的内容本来就不会随重渲染丢失。
就算你改成受控组件写法,给input加上 value={value} 属性,也不会出现回到初始值的问题:重渲染时React会把拿到的最新state值赋值给input的 value 属性,显示的还是你刚刚输入的内容。
- 只有当组件卸载后重新挂载(比如父组件销毁该组件、或给组件设置了新的key触发实例重建,才会重新走useState初始化逻辑,输入框才会回到初始空值。
内容的提问来源于stack exchange,提问作者Jantoma21
相关产品推荐
相关产品推荐

