我有一个“不受控制的”React组件,其输入字段如下:
render: function(){
return (
<input
id="pickupField"
tabIndex="1"
placeholder=""
className="order-form-input"
onFocus={this.disableAddresses}
onBlur={() => {
this.enableAddresses();
this.fieldChange('address');
}}
defaultValue={(order.pickup || {}).address || ''}
ref="pickupAddress"
hintText={(this.state.hideHintText) ? "" : "Enter the pickup address"}
floatingLabelFixed={true}
floatingLabelText="Pickup Address"
/>
)
}
我遇到的问题是我想在第一次渲染后使用新数据更新此组件,并使用defaultValue而不是value意味着输入字段文本在第一次渲染后不会更新 . 例如,更新输入字段中文本的唯一方法是让用户输入,我似乎无法以编程方式更改它 .
我可以使用value而不是defaultValue来解决这个问题 . 但是,我不想使用use值而不是defaultValue的原因是因为我必须使用onChange监听器,这对我的用例来说太过分了 .
使用onChange侦听器的原因是矫枉过正,因为每次组件状态更改时我都会与数据库同步 . 我宁愿在 onblur
上同步而不是在 onchange
上同步 .
我看到了这个问题的一些解决方案,使用React字段,如“key”,但TMK这个解决方案将强制组件重新安装,这听起来对性能不利并保持逻辑简单 .
Anyone know how to solve this problem? How to update a React component's input fields programmatically, but avoiding an onchange listener?