Skip to main content

useContractRead

Generic hook for reading any data from a smart contract via its function/view/variable name.

import { useContractRead } from "@thirdweb-dev/react";

Usage

Provide your smart contract instance from useContract and a function name as the arguments.

For example, to read the value of a view on your smart contract called getName you would do the following:

import { useContractRead, useContract } from "@thirdweb-dev/react";

// Your smart contract address
const contractAddress = "{{contract_address}}";

function App() {
const { contract } = useContract(contractAddress);
const { data, isLoading, error } = useContractRead(contract, "getName");
}

Configuration

Function Name

The function name you provide should be the name of the function in your smart contract.

This can be any function, view, variable, etc. that does not require a transaction to occur.

import { useContractRead, useContract } from "@thirdweb-dev/react";

// Your smart contract address
const contractAddress = "{{contract_address}}";

function App() {
const { contract } = useContract(contractAddress);
const { data, isLoading, error } = useContractRead(
contract,
"myContractFunction",
);
}

Arguments

If your function requires arguments, pass them as additional arguments to the hook.

import { useContractRead, useContract, Web3Button } from "@thirdweb-dev/react";

// Your smart contract address
const contractAddress = "{{contract_address}}";

function App() {
const { contract } = useContract(contractAddress);

// Read contract with arguments
const { data, isLoading, error } = useContractRead(
contract,
"getName",
"arg1",
"arg2",
);

if (error) {
console.error("failed to read contract", error);
}

return (
<div>{isLoading ? <p>Loading...</p> : <p>Contract Name: {data}</p>}</div>
);
}

Call Overrides (optional)

If you provide an additional argument to the hook, it will be used as the CallOverrides object send with your request.

import { useContractRead, useContract, Web3Button } from "@thirdweb-dev/react";

// Your smart contract address
const contractAddress = "{{contract_address}}";

function App() {
const { contract } = useContract(contractAddress);

// Read contract with arguments
const { data, isLoading, error } = useContractRead(
contract,
"getName",
// function arguments
"arg1",
"arg2",
// Final argument is the call overrides
{
blockTag: 123,
from: "0x123",
},
);

if (error) {
console.error("failed to read contract", error);
}

return (
<div>{isLoading ? <p>Loading...</p> : <p>Contract Name: {data}</p>}</div>
);
}