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