Vue3.2+Vite+Typescript 开发(三)
子组件中的标签重复渲染问题发现与解决
点击查看详情
此为一个展示账户信息的页面组件 - /src/my/components/AccountInfo.vue
<script setup lang="ts"> |
其中,store.userInfo.account_price?.toFixed(2) 导致控制台出现了一个有关报错,起初我没有在意,但是在父页面执行刷新时,导致该组件出现了重复二次渲染的现象。
原因为:store.userInfo 是响应式数据,当其值从 null/undefined 变为有值时会触发渲染。
其中:
?.安全访问属性??提供默认值
输入框 type=number时的莫名提示解决
点击查看详情
实际页面中,输入 123.45 点击提交时, 输入框会弹出一个距离最近的有效值提示,提示输入123 或124 。
这个问题的根本原因是 浏览器对 <input type="number"> 的默认行为 结合 浮点数精度处理 导致的。以下是详细分析和解决方案:
🔍 问题根源分析
- 浏览器对
type="number"的默认行为
当使用 <input type="number"> 时:
- 浏览器会自动进行步进值(step)校验
- 默认
step="1",导致浏览器会尝试将输入值对齐到最近的整数 - 触发条件:提交表单或失去焦点时
- 浮点数精度问题(关键原因)
- 当你输入
123.45时,实际存储的值可能是123.44999999999999(二进制浮点数误差) - 浏览器根据
step="1"的规则,会将其修正为最近的整数:123.449...→ 向下取整提示123123.55→ 向上取整提示124
🛠️ 解决方案
方案1:强制指定 step 属性(推荐)
<input |
效果:
- 明确告知浏览器允许2位小数
- 不再进行整数修正
方案2:改用 type="text" + 自定义校验
<input |
JS 处理:
const handlePriceInput = (e) => { |
方案3:精确控制数值(处理浮点数误差)
// 提交时强制修正精度 |
🌟 最佳实践建议
始终为
type="number"设置明确的step<input type="number" step="any"> <!-- 允许任意小数 -->
<!-- 或 -->
<input type="number" step="0.01"> <!-- 明确2位小数 -->
コメント