Icon HelpCircleForumIcon Link

⌘K

Icon HelpCircleForumIcon Link
Nightly /
Optimized React Example

Icon LinkOptimized React Example

This example implements the strategies outlined in Optimizing Frontend Apps and demonstrates how to improve the perceived speed of transactions in a React application.

import { Provider, Wallet, ScriptTransactionRequest } from "fuels";
import { useEffect, useState } from "react";
 
import { TestContract } from "./typegend";
import contractIds from "./typegend/contract-ids.json";
 
function App() {
  const [request, setRequest] = useState<ScriptTransactionRequest | null>(null);
 
  // Initialize the provider and wallet
  const NETWORK_URL = "https://mainnet.fuel.network/v1/graphql";
  const provider = new Provider(NETWORK_URL);
  const wallet = Wallet.fromAddress("0x...", provider);
 
  /**
   * Here we'll prepare our transaction upfront on page load, so that
   * by the time the user interacts with your app (i.e. clicking a btn),
   * the transaction is ready to be submitted
   */
  useEffect(() => {
    const onPageLoad = async () => {
      // 1. Connect to the contract
      const contractInstance = new TestContract(
        contractIds.testContract,
        wallet,
      );
 
      // 2. Invoke the contract function whilst estimating and funding the
      // call, which gives us the transaction request
      const preparedRequest = await contractInstance.functions
        .increment_counter(1)
        .fundWithRequiredCoins();
 
      setRequest(preparedRequest);
    };
 
    onPageLoad();
  }, []);
 
  /**
   * By the time user user clicks the submit button, we only need to
   * submit the transaction to the network
   */
  const handleSubmit = async () => {
    if (!request) return;
 
    // 1. Submit the transaction to the network
    const response = await wallet.sendTransaction(request);
 
    // 2. Wait for the transaction to settle and get the result
    const result = await response.waitForResult();
 
    console.log("result", result);
  };
 
  return (
    <div>
      <button onClick={handleSubmit}>Submit</button>
    </div>
  );
}
 
export default App;