You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在React中如何使用numberWithCommas正则正确格式化货币?

问题根源

白屏是因为accDetails初始值为空字符串,首次渲染时访问其bal属性得到undefined,调用toFixed方法直接抛出未捕获错误,导致React组件渲染失败。你写的格式化函数仅处理了千分位,没有做入参合法性校验,也会触发异常。

修复步骤

1. 修正状态初始值与渲染安全校验

将accDetails的初始值从空字符串改为空对象,所有访问accDetails属性的地方加可选链判断,避免数据未返回时调用方法报错:

// 初始值改为空对象
const[accDetails, setAccDetails] = useState({});

余额渲染位置修改为:

{accDetails.bal ? numberWithCommas(accDetails.bal.toFixed(2)) : ''} Currency = {accDetails?.ccy || ''}

其余accDetails.fullname、accDetails.address等属性也建议统一加?.可选链,避免数据结构不符合预期时报错。

2. 优化格式化函数

给原有格式化函数加入参合法性校验,避免空值/非数字值传入时触发异常:

const numberWithCommas = (x) => {
    if((!x && x !== 0) || isNaN(Number(x))) return '';
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}

也可以直接使用JS内置的国际化API实现货币格式化,兼容性更好、不需要手动写正则,还可以自动适配货币符号:

const formatCurrency = (num, ccy = 'USD') => {
  if(typeof num !== 'number' || isNaN(num)) return ''
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: ccy,
    minimumFractionDigits: 2
  }).format(num)
}
// 调用时直接输出完整格式化结果,不需要单独拼接货币单位
{formatCurrency(accDetails.bal, accDetails.ccy)}

3. 补充请求异常处理

给fetch请求加catch分支,避免请求失败时页面无反馈:

fetch('https://financeplus.herokuapp.com/api/getaccounts/'+accNum,{
    method : 'GET',
    mode : 'cors',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    },
}).then((response)=>response.json()).then((responseJson)=>{
    setAccDetails(responseJson.data || {})
}).catch(err => {
    console.error('获取账户信息失败', err)
    // 可自行添加用户提示逻辑
})

内容的提问来源于stack exchange,提问作者MikeBlue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:24:05