Web3 Button
Button that executes a function on a smart contract from the connected wallet when clicked.
It ensures the following criteria before attempting to call the contract function:
- There is a connected wallet (if there is not, renders a Connect Wallet Button instead).
- The connected wallet is on the correct network
as specified in the ThirdwebProvider's
activeChain
prop (if it is not, renders switch network button instead).
import { Web3Button } from "@thirdweb-dev/react-native";
Usage
Render the Web3Button
component with two required props to display the button:
contractAddress
: The address of the smart contract to interact with.action
: The logic to execute when the button is clicked.
import { Web3Button } from "@thirdweb-dev/react-native";
function App() {
return (
<Web3Button
contractAddress="0x..." // Your smart contract address
action={(contract) => console.log(contract)} // Logic to execute when clicked
>
Execute Action
</Web3Button>
);
}
Configuration
contractAddress (required)
The address of the smart contract to interact with.
If you have not imported your contract to the dashboard, you must additionally specify the contractAbi
prop.
import { Web3Button } from "@thirdweb-dev/react-native";
function App() {
return (
<Web3Button
contractAddress="0x..."
action={(contract) => console.log(contract)} // Logic to execute when clicked
>
Execute Action
</Web3Button>
);
}
action (required)
The logic to execute when the button is clicked.
The contract instance is available as the first argument of the function for you to interact with.
import { Web3Button } from "@thirdweb-dev/react-native";
function App() {
return (
<Web3Button
contractAddress="0x..."
// For example, claim an NFT from this contract when the button is clicked
action={(contract) => contract.erc721.claim(1)}
>
Claim NFT
</Web3Button>
);
}
theme (optional)
You can pass a custom theme
object that will control the colors of the button
or pass one of our default themes: light
or dark
. We also have convenient functions to
get a dark or light theme: darkTheme()
and lightTheme()
.
The default value is "dark"
.
import { Web3Button } from "@thirdweb-dev/react-native";
function App() {
return (
<Web3Button
contractAddress="0x..."
action={(contract) => console.log(contract)} // Logic to execute when clicked
theme="light"
>
Execute Action
</Web3Button>>
);
}
You could also define custom background and text color for the button:
import { Web3Button, lightTheme } from '@thirdweb-dev/react-native';
<Web3Button theme={lightTheme({
buttonBackgroundColor: 'black',
buttonTextColor: 'white'
})}
/>
contractAbi (optional)
The Application Binary Interface (ABI) of the contract.
This is only required if you have not imported your contract to the dashboard.
import { Web3Button } from "@thirdweb-dev/react-native";
function App() {
return (
<Web3Button
contractAddress="0x..."
contractAbi={[{ ... }]}
action={(contract) => console.log(contract)} // Logic to execute when clicked
>
Execute Action
</Web3Button>
);
}
overrides (optional)
The overrides to use when sending the transaction.
Includes options for overriding all transaction parameters including:
value
: The amount of wei to send with the transaction.gasLimit
: The maximum amount of gas to use for the transaction.
import { Web3Button } from "@thirdweb-dev/react";
import { ethers } from "ethers";
function App() {
return (
<Web3Button
contractAddress="0x..."
action={(contract) => contract.erc721.claim(1)}
overrides={{
accessList: [], // The AccessList to include; only available for EIP-2930 and EIP-1559 transactions.
blockTag: "latest", // A BlockTag specifies a specific block location in the Blockchain.
ccipReadEnabled: false, // https://eips.ethereum.org/EIPS/eip-3668#use-of-ccip-read-for-transactions
customData: {}, // The transaction data.
from: "0x...", // The address this transaction is from.
gasLimit: 100000, // The maximum amount of gas this transaction is permitted to use.
gasPrice: 100000, // The price (in wei) per unit of gas this transaction will pay.
maxFeePerGas: 100000, // The maximum price (in wei) per unit of gas this transaction will pay
maxPriorityFeePerGas: 0, // The price (in wei) per unit of gas this transaction will allow in addition to the block's base fee
nonce: 0, // The nonce used as part of the proof-of-work to mine this block.
type: 0, // The EIP-2718 type of this transaction envelope, or undefined for to use the network default
value: ethers.utils.parseEther("0.1"), // send 0.1 ether with the contract call
}}
>
Execute Action
</Web3Button>
);
}
onSuccess (optional)
Callback function to be run when the contract method call is successful.
import { Web3Button } from "@thirdweb-dev/react";
function App() {
return (
<Web3Button
contractAddress="0x..."
action={(contract) => console.log(contract)} // Logic to execute when clicked
onSuccess={(result) => alert("Success!")}
>
Execute Action
</Web3Button>
);
}
onError (optional)
Callback function to be run when the contract method call fails.
import { Web3Button } from "@thirdweb-dev/react";
function App() {
return (
<Web3Button
contractAddress="0x..."
action={(contract) => console.log(contract)} // Logic to execute when clicked
onError={(error) => alert("Something went wrong!")}
>
Execute Action
</Web3Button>
);
}
onSubmit (optional)
Callback function to be run after the user has confirmed the transaction.
import { Web3Button } from "@thirdweb-dev/react";
function App() {
return (
<Web3Button
contractAddress="0x..."
action={(contract) => console.log(contract)} // Logic to execute when clicked
onSubmit={() => console.log("Transaction submitted")}
>
Execute Action
</Web3Button>
);
}
isDisabled (optional)
Option to disable the button.
By default, the button is disabled and shows a spinner icon while the transaction is executing.
import { Web3Button } from "@thirdweb-dev/react";
function App() {
return (
<Web3Button
contractAddress="0x..."
action={(contract) => console.log(contract)} // Logic to execute when clicked
isDisabled
>
Execute Action
</Web3Button>
);
}