Back to Documentation

React Integration Guide

Learn how to integrate FXRateSync API with React using modern hooks and best practices.

Custom Hook Example

Create a reusable React hook for currency conversion:

// hooks/useCurrencyConverter.js
import { useState, useCallback } from 'react'

export const useCurrencyConverter = () => {
  const [result, setResult] = useState(null)
  const [loading, setLoading] = useState(false)
  const [error, setError] = useState(null)

  const convert = useCallback(async (from, to, amount) => {
    setLoading(true)
    setError(null)

    try {
      const response = await fetch(
        `https://api.fxratesync.io/v1/convert?from=${from}&to=${to}&amount=${amount}`,
        {
          headers: {
            'X-API-Key': process.env.REACT_APP_FX_API_KEY
          }
        }
      )

      if (!response.ok) {
        throw new Error('Conversion failed')
      }

      const data = await response.json()
      setResult(data)
    } catch (err) {
      setError(err.message)
    } finally {
      setLoading(false)
    }
  }, [])

  return { result, loading, error, convert }
}

Component Usage

// components/CurrencyConverter.jsx
import React, { useState } from 'react'
import { useCurrencyConverter } from '../hooks/useCurrencyConverter'

export const CurrencyConverter = () => {
  const [from, setFrom] = useState('USD')
  const [to, setTo] = useState('EUR')
  const [amount, setAmount] = useState(100)
  
  const { result, loading, error, convert } = useCurrencyConverter()

  const handleSubmit = (e) => {
    e.preventDefault()
    convert(from, to, amount)
  }

  return (
    <form onSubmit={handleSubmit} className="space-y-4">
      <input
        type="number"
        value={amount}
        onChange={(e) => setAmount(e.target.value)}
        placeholder="Amount"
        className="w-full p-3 border rounded-lg"
      />
      
      <select 
        value={from} 
        onChange={(e) => setFrom(e.target.value)}
        className="w-full p-3 border rounded-lg"
      >
        <option value="USD">USD</option>
        <option value="EUR">EUR</option>
        <option value="GBP">GBP</option>
      </select>
      
      <button 
        type="submit" 
        disabled={loading}
        className="w-full bg-primary text-background p-3 rounded-lg"
      >
        {loading ? 'Converting...' : 'Convert'}
      </button>
      
      {result && (
        <div className="p-4 bg-success/10 rounded-lg">
          <p>{result.converted_amount.toFixed(2)} {result.to}</p>
        </div>
      )}
      
      {error && (
        <div className="p-4 bg-destructive/10 text-destructive-foreground rounded-lg">
          {error}
        </div>
      )}
    </form>
  )
}

Best Practices

  • • Use environment variables for API keys
  • • Implement proper error handling
  • • Add loading states for better UX
  • • Consider caching results to reduce API calls

Build Your App

Ready to build a complete currency converter with React?

Complete Tutorial →