在 React.js 中导入实用函数

发布日期:2026-07-03 21:18:05   来源 : 杭州电子商务研究院    浏览量 :8
杭州电子商务研究院 发布日期:2026-07-03 21:18:05  
8

介绍

随着 React.js 应用的发展,您可能会发现代码中存在某些代码异味,例如重复。通常,这些逻辑例程会从代码中提取为实用函数,并放置在单独的文件中,以便其他组件可以使用它们。例如格式化数字或执行各种计算。在本指南中,您将创建一个玩具应用,通过将函数分成单独的文件并从组件中导入这些函数来应用这些概念。该应用接收 BTC(一种加密货币)的输入和 BTC 兑美元的汇率,并根据这些输入显示您将拥有的美元。

设置

首先创建名为BTCDollarConverter的组件,如下所示:

      import React from 'react';

export default class BTCDollarConverter extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      btc: 0.00,
      btcRate: 0.00,
      dollars: 0.00
    }
  }

  handleBtcChanged(event) {
    var btc     = parseFloat(event.target.value);
    var dollars = btc * this.state.btcRate;

    this.setState({
      btc: btc,
      dollars: dollars
    });
  }

  handleBtcRateChanged(event) {
    var btcRate = parseFloat(event.target.value);
    var dollars = this.state.btc * btcRate;

    this.setState({
      btcRate: btcRate,
      dollars: dollars
    });
  }

  render() {
    return (
      <div>
        BTC: 
        <input
          type="number"
          value={this.state.btc}
          onChange={this.handleBtcChanged.bind(this)}
        /> 
        at 
        <input
          type="number"
          value={this.state.btcRate}
          onChange={this.handleBtcRateChanged.bind(this)}
        /> 
        Dollars per BTC = {this.state.dollars}
      </div>
    );
  }
}
    

该组件维护三种状态:

  1. btc:你拥有的 BTC 数量
  2. btcRate:每 BTC 的美元汇率
  3. 美元:您拥有的比特币数量乘以btcRate后,您将得到多少美元

第一个输入控制您拥有的 BTC 数量,由组件的render()方法提供:

      <input
  type="number"
  value={this.state.btc}
  onChange={this.handleBtcChanged.bind(this)}
/>
    

如你所见,这个输入元素绑定到了状态btc,每次用户更改值时,它都会触发onChange属性所绑定的this.handleBtcChanged(event)

      handleBtcChanged(event) {
  var btc     = parseFloat(event.target.value);
  var dollars = btc * this.state.btcRate;

  this.setState({
    btc: btc,
    dollars: dollars
  });
}
    

逻辑非常简单。它首先获取输入的值并将其存储在临时变量btc中。它将该值与当前btcRate状态值相乘以得出美元金额。然后它调用setState()来更新btc美元的状态值,迫使组件使用更新后的值重新渲染。

btcRate的输入也是如此:

      <input
  type="number"
  value={this.state.btcRate}
  onChange={this.handleBtcRateChanged.bind(this)}
/>
    

它的值与状态值btcRate绑定。每次用户修改输入元素时,它都会调用handleBtcRateChanged(event)

      handleBtcRateChanged(event) {
  var btcRate = parseFloat(event.target.value);
  var dollars = this.state.btc * btcRate;

  this.setState({
    btcRate: btcRate,
    dollars: dollars
  });
}
    

此方法获取输入并将其存储在临时变量btcRate中,然后将其乘以this.state.btc的当前状态以得出最终的美元金额。然后通过setState()更新btcRate美元金额

创建实用函数

请注意,每次输入发生变化时,无论是btc还是btcRate美元变量都会重新计算并自动显示。这种方法有两个问题:

  1. handleBtcChanged()handleBtcRateChanged的​​计算是相同的
  2. 美元值未格式化并且将显示计算出的小数位数。

为了解决这些问题,您需要在组件将导入的单独文件中创建两个单独的函数。您始终可以在组件内使用这些函数,但实际上,为了便于重复使用,应将这些实用函数放在各自的文件中。

计算函数

由于计算只是两个值的乘法,解决第一个问题的函数将如下所示:

      function computeDollars(btc, btcRate) {
  return btc * btcRate;
}
    

格式化函数

假设美元的格式规则是小数点左边每三位数字加一个“,”并且数值应四舍五入到小数点后两位。该函数如下所示:

      function formatDollars(dollars) {
  dollars = (Math.round(dollars * 100) / 100).toFixed(2);
  dollars = dollars.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");

  return dollars;
}
    

函数中的第一行将值四舍五入到小数点后两位。第二行使用正则表达式作为replace()的第一个参数,查找每组三个整数的位置,而第二个参数是将插入到该位置的字符。

使用外部文件

将这两个函数放在与组件位于同一目录中的外部 JavaScript 文件中,名为utils.js 。由于函数将作为模块导出,因此您需要在其前面加上export关键字。utils.js将如下所示:

      export function computeDollars(btc, btcRate) {
  return btc * btcRate;
}

export function formatDollars(dollars) {
  dollars = (Math.round(dollars * 100) / 100).toFixed(2);
  dollars = dollars.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");

  return dollars;
}
    

在您的BTCDollarConverter组件上,在文件顶部(在import React from 'react'之后)添加以下内容以导入两个函数:

      import { computeDollars, formatDollars } from './utils.js';
    

您现在可以调用组件内的实用函数。handleBtcChanged (event)handleBtcRateChanged(event)现在将是:

      handleBtcChanged(event) {
  var btc     = parseFloat(event.target.value);
  var dollars = computeDollars(btc, tihs.state.btcRate);

  this.setState({
    btc: btc,
    dollars: dollars
  });
}

handleBtcRateChanged(event) {
  var btcRate = parseFloat(event.target.value);
  var dollars = computeDollars(this.state.btc, btcRate);

  this.setState({
    btcRate: btcRate,
    dollars: dollars
  });
}
    

render()方法中,显示美元现在将如下所示:

      Dollars per BTC = {formatDollars(this.state.dollars)}
    

总体代码

utils.js将包含:

      export function computeDollars(btc, btcRate) {
  return btc * btcRate;
}

export function formatDollars(dollars) {
  dollars = (Math.round(dollars * 100) / 100).toFixed(2);
  dollars = dollars.<span class="hlj
以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据