将此函数转换为无状态反应组件

时间:2017-01-23 17:20:14

标签: javascript regex reactjs number-formatting

我有这个功能,在'之后调暗数字的尾随零。'

离。

  • 123.456000 - > 123.456的 000
  • 100.0000 - > 100.的 0000
  • 456.999990 - > 456.99999的 0
  • 333 - > 333

此函数生成的最终html类似于

.table-cell:drop-target { -fx-background-color: -fx-background ; -fx-background: yellow ; -fx-border-color: -fx-table-cell-border-color -fx-table-cell-border-color transparent transparent ; } .drag-source { -fx-font-size: 18 ; -fx-padding: 10 ; }

这是实际代码

123.456 <span class="trailing-zeros"> 000 </span>

regexp用分类的范围替换尾随的零并创造奇迹。

现在我必须在反应环境中使用它,这是表示/哑/无状态组件的完美案例。

// Only fade trailing zeros if they are decimals
function fadeTrailingZeros (val) {
  var str = val + ''
  if (str.match(/\./)) {
    return str.replace(/(0+)$/g, '<span class="trailing-zeros">' + '$1' + '</span>')
  } else {
    return str
  }
}

我该怎么处理?

1 个答案:

答案 0 :(得分:4)

你在哪里接近,并且已经明白你不能通过连接字符串来制作JSX(实际上你可以通过涉及危险的SetInnerHTML,但这是另一个话题)

这样的事情应该适合你,但你当然可以优化它

const FadeTrailingZeros = ({ value }) => {
  if (value.match(/\./)) {
    let [prec, dec] = value.split('.')
    const trailingZeros = dec.match(/(0+)$/g)
    dec = dec.replace(/(0+)$/g, '')
    return (<span>{prec}.{dec}{trailingZeros && <span className='trailing-zeros'>{trailingZeros[0]}</span>}</span>)
  } else {
    return (
      <span>{value}</span>
    )
  }
}