我的情况有点奇怪,我正在我们的应用程序中处理货币。在模型方面,我在发送到服务器之前将货币保存为美分,因为我不想在服务器端处理小数点。然而,在视图中,我希望显示正常货币而不是美分。
所以,我有这个输入字段,我从美元中获取数据并将其更改为美分:
<input name="balance" type="number" step="0.01" min="0" placeholder="Balance in cents" onChange={this.handleUpdate} value={this.props.user.balance / 100)} />
当输入值发生变化时,我会在将其发送到上游之前将其改回美分:
handleUpdate: function(e) {
var value = e.target.value;
// changing it back from cents to dollars
value = parseFloat(value) * 100;
// save back to the parent component managing the prop
this.props.onUserUpdate(value);
}
这让我陷入了僵局,我无法输入小数点“。” 让我演示一下:
33
在输入框中 --> 变为3300
父状态 --> 像33
在组件 prop 中一样返回-一切都很好33.3
在输入框中 --> 成为3330
父状态 --> 像33.3
在组件props中一样返回-一切都很好33.
在输入框中 --> 变为3300
父状态 --> 像33
在组件props中一样返回-这就是问题所在
正如您在案例#3 中看到的,当用户第一次输入“.”时。这不会转换回与“。”相同的数字。
由于它是一个受控输入,所以基本上没有办法写“.”。
我曾尝试将不受控制的元素与 一起使用defaultValue
,但数量props在组件呈现时尚未准备好,因此它只是空的