React Native 金额输入别直接 parseFloat:草稿与数值分开存
·
专题:输入与交互

金额输入到“12.”时,小数点立即消失;输入“0.05”又经历多次跳动。每次 onChangeText 都 parseFloat,再把数值转回字符串,丢掉了用户尚未完成的输入状态。
先理解问题
编辑草稿是字符串,业务金额是经过校验的数值表示。它们拥有不同合法范围:“12.”可以是合理草稿,却不是最终展示格式。输入期间先保护用户意图,提交时再转换。
实现路径
- state 保存原始草稿,只进行必要的长度与字符约束。
- 失焦或提交时校验小数位、范围和是否为空,生成最小货币单位。
- 格式化金额用于展示区域,避免每次键入都重排输入内容。
核心示例
function toCents(text: string): number | null {
if (!/^\d+(\.\d{1,2})?$/.test(text)) return null;
const [whole, fraction = ''] = text.split('.');
const result = Number(whole) * 100 + Number(fraction.padEnd(2, '0'));
return Number.isSafeInteger(result) ? result : null;
}
示例限定非负、点号小数和两位精度,属于明确的产品输入协议,不适用于所有货币与地区。键盘类型只能改善输入便利性,不能代替校验;粘贴、硬件键盘和辅助输入仍可能带来其他字符。
怎么验证
- 输入“12.”时不强制删点。
- 提交“0.05”得到 5 个最小单位。
- 空串、三位小数和超范围数据得到明确反馈。
适用范围与参考
示例用于说明设计与排查方法,非完整应用,也不代表已经过设备实测。 组件片段需接入对应项目;文中自定义函数、示意协议和策略数值需按业务补齐。迁移到 OHOS 时应另外核对适配层支持。
更多推荐


所有评论(0)