diff --git a/site/react/guides/read-from-contract.md b/site/react/guides/read-from-contract.md index 57f23667f0..b1795717d9 100644 --- a/site/react/guides/read-from-contract.md +++ b/site/react/guides/read-from-contract.md @@ -70,6 +70,60 @@ function ReadContract() { } ``` +## Refetching On Blocks + +The [`useBlockNumber` Hook](/react/api/hooks/useBlockNumber) can be utilized to refetch or [invalidate](https://tanstack.com/query/latest/docs/framework/react/guides/query-invalidation) the contract data on a specific block interval. + +:::code-group +```tsx [read-contract.tsx (refetch)] +import { useEffect } from 'react' +import { useBlockNumber, useReadContract } from 'wagmi' + +function ReadContract() { + const { data: balance, refetch } = useReadContract({ + ...wagmiContractConfig, + functionName: 'balanceOf', + args: ['0x03A71968491d55603FFe1b11A9e23eF013f75bCF'], + }) + const { data: blockNumber } = useBlockNumber({ watch: true }) + + useEffect(() => { + // want to refetch every `n` block instead? use the modulo operator! + // if (blockNumber % 5 === 0) refetch() // refetch every 5 blocks + refetch() + }, [blockNumber]) + + return ( +
Balance: {balance?.toString()}
+ ) +} +``` +```tsx [read-contract.tsx (invalidate)] +import { useQueryClient } from '@tanstack/react-query' +import { useEffect } from 'react' +import { useBlockNumber, useReadContract } from 'wagmi' + +function ReadContract() { + const queryClient = useQueryClient() + const { data: balance, refetch } = useReadContract({ + ...wagmiContractConfig, + functionName: 'balanceOf', + args: ['0x03A71968491d55603FFe1b11A9e23eF013f75bCF'], + }) + const { data: blockNumber } = useBlockNumber({ watch: true }) + + useEffect(() => { + // if `useReadContract` is in a different hook/component, + // you can import `readContractQueryKey` from `'wagmi/query'` and + // construct a one-off query key to use for invalidation + queryClient.invalidateQueries({ queryKey }) + }, [blockNumber, queryClient]) + + return ( +
Balance: {balance?.toString()}
+ ) +} +``` ::: ## Calling Multiple Functions diff --git a/site/vue/guides/read-from-contract.md b/site/vue/guides/read-from-contract.md index 6105c2718c..b2f7c893de 100644 --- a/site/vue/guides/read-from-contract.md +++ b/site/vue/guides/read-from-contract.md @@ -75,6 +75,62 @@ const { ::: + +