为何RegisterForm组件的props.periode始终取Card组件data首个元素值?
问题原因分析
未给遍历的Cardi组件设置唯一
key
React渲染列表时依赖key识别不同组件实例。如果省略key或使用重复key,React会复用已有组件的DOM节点和实例,不会重新初始化新的Cardi及其内部的RegisterForm组件,导致后续RegisterForm的props.periode未更新,始终保留第一个组件的初始值。RegisterForm内表单控件的
id/name属性重复
如果RegisterForm里存储periode的表单元素(比如隐藏输入框)使用固定的id或name(例如<input type="hidden" name="periode" value={props.periode} />),多个Cardi渲染出的表单会包含相同标识的元素。浏览器提交表单时只会读取第一个匹配标识的元素值,因此始终拿到第一个item的periode。共享状态或闭包引用错误
若在父组件或Cardi组件中,将periode存入共享状态变量,或是绑定提交事件时未正确捕获当前item的periode(比如使用未被块级作用域绑定的变量),会导致所有RegisterForm的提交逻辑都引用同一个过时的periode值,最终表现为始终获取第一个元素的数值。
内容的提问来源于stack exchange,提问作者danawanb
相关产品推荐
相关产品推荐

