从 API 获取数据并将字符串转换为数字

我有两个问题。首先,当从 API 获取数据时,我只在我设置的时间间隔后才获取数据。但是,我需要立即接听第一个电话。其次,当我将接收到的数据转换为数字时,我丢失了部分数字,例如收到 11,518.6217 而我只得到 11。有人能帮帮我吗?


    class Currencies extends Component {

      state = {

        inputField: 0,

        exRates: 0,

      };

      componentDidMount() {

        try {

          setInterval(async () => {

            const res = await fetch(

              "https://api.coindesk.com/v1/bpi/currentprice.json"

            );

            const exRates = await res.json();

            console.log(exRates.bpi);

            this.setState({ exRates: exRates.bpi });

          }, 6000);

        } catch (err) {

          console.log(err);

        }

      }

      BTCChangeHandler = (event) => {

        this.setState({ inputField: event.target.value });

      };

      render() {

        const exRates = this.state.exRates;

        const currData = Object.values(exRates).map((value) => value.rate);

        const rates = currData.map(parseFloat);

        console.log(rates);

        return (

          <div>

            <input

              type="number"

              placeholder="Enter BTC value"

              onChange={this.BTCChangeHandler}

            />

            <Currency name="USD" value={this.state.inputField * rates[0]} />

            <Currency name="GPB" value={this.state.inputField * rates[1]} />

            <Currency name="EUR" value={this.state.inputField * rates[2]} />

          </div>

        );

      }

    }

    export default Currencies;


小怪兽爱吃肉
浏览 134回答 3
3回答

ITMISS

这是一个区域设置问题。Api 提供的值有一个,表示千位和一个.表示小数。您的客户可能使用相反的方式。首先,您必须将字符串转换为您的客户语言环境,然后您可以将其解析为数字。您可以使用本文中提到的库。或者您可以创建自己的函数来切换符号。

小唯快跑啊

您可以尝试setTimOut而不是setInterval然后返回一个在 api rest 中获取数据的承诺

互换的青春

我正在使用 setInterval,但在第一次调用时我需要立即调用它您应该手动调用它,以及在setInterval.let dofetch = async () => {&nbsp; const res = await fetch(&nbsp; &nbsp; "https://api.coindesk.com/v1/bpi/currentprice.json"&nbsp; );&nbsp; const exRates = await res.json();&nbsp; console.log(exRates.bpi);&nbsp; this.setState({ exRates: exRates.bpi });}setInterval(dofetch, 6000);dofetch()我丢失了部分数字,例如收到 11,518.6217 我只得到 11您的字符串数字格式为,,您应该在将它们传递给parseFloat函数之前将其删除。parseFloat('11,518.6217') // 11parseFloat('11,518.6217'.split(',').join('')) // 11.518.6217所以改变:currData.map(parseFloat);到:currData.map(s => parseFloat(s.split(',').join('')));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript