react native输入框 输入金额等数据后如何格式化显示

在React Native应用中,为TextInput组件处理输入的金额数据格式化,可以通过监听焦点变化来实现。首先,定义一个state记录输入状态(endEdit)和显示的金额(money)。当输入框获取焦点时,设置endEdit为false,显示原始输入;失去焦点时,endEdit设为true,将输入值转换并格式化后更新到money中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import React ,{ Component } from 'react';
import {View} from 'react-native';
import {
  Cells,
  Cell,
  CellHeader,
  CellBody,
  CellFooter,
  CellText,
  Input,
  Label,
} from 'rn-weui/src';
export class InputBox extends Component{
    constructor(props) {
      super(props);
      this.state = {
            money:'',
            endEdit:true
        };
        this.fmoney = this.fmoney.bind(this);
    }
        /**
     * 格式化money
     * s为要格式化的money
     * n为小数位数
     */
    fmoney(s, n){   
         if(s==='')
            return;
       n = n > 0 && n <= 20 ? n : 2;   
       s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";   
       var l = s.split(".")[0].split("").reverse(),   
       r = s.split(".")[1];   
       var t = "";   
       for(let i = 0; i < l.length; i ++ ) {   
          t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");   
       }   
       return t.split("").reverse().join("") + "." + r;   
    } 

    render(){
        return (
            <Cells>
             <Cell>
          <CellHeader><Label>单价</Label></CellHeader>
          <CellBody>
            <View>
              <Input style={{height:40}} 
                underlineColorAndroid="transparent"
                placeholder="请输入金额"
                keyboardType='numeric'
                value={this.state.endEdit?this.fmoney(this.state.money,2):this.state.money+''}
                            onChangeText={(text)=>{
                                this.setState({money:text});    
                            }}      
                            onFocus={()=>{
                                // this.setState({endEdit:false});
                                this.setState({endEdit:false,money:''});
                            }}
                            onEndEditing={(event) => {
                                this.setState({endEdit:true});
                            }}
                          ></Input>
                        </View>
          </CellBody>
          <CellFooter>元</CellFooter>
        </Cell>

        <Cell>
        <CellHeader><Label>单价</Label></CellHeader>
          <CellBody>
            <View>
              <Input style={{height:40}} 
                underlineColorAndroid="transparent"
                placeholder="请输入物品单价"
                keyboardType='numeric'
                          ></Input>
                        </View>
          </CellBody>
          <CellFooter>元</CellFooter>
        </Cell>
        </Cells>
        );
    }
}

首先,state声明一个输入框是否正在输入的状态endEdit和一个用来表示输入框中显示的值money; 然后,在onblue获得焦点的实践中,将是否正在输入的状态改为false,输入框中的显示money;输入完成,将endEdit改为出,输入框中的值改为格式化后的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值