What is RainbowKit?
RainbowKit is a React library that allows developers an easy way to connect crypto wallets to their sites. It is highly customizable and very intuitive.
Key features
-Abstraction
-Personalization
-Simple to use
Basic configuration and theming
Dependencies
Wagmi, for wagmi v2: TanStack Query
Viem
Config overview:
import '@rainbow-me/rainbowkit/styles.css'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { WagmiProvider, http } from 'wagmi'
import { getDefaultConfig } from '@rainbow-me/rainbowkit'
import { mainnet } from 'wagmi/chains'
import { RainbowKitProvider } from '@rainbow-me/rainbowkit'
const config = getDefaultConfig({
appName: 'RainbowKit demo',
projectId: 'YOUR_PROJECT_ID',
chains: [mainnet],
transports: {
[mainnet.id]: http(),
},
ssr: true, // If your dApp uses server side rendering (SSR)
})
const queryClient = new QueryClient()
const App = () => {
return (
{/* Your App */}
)
}
Customization
We can change the color and font style of the principal modal by adding a custom theme to the provider.
import { RainbowKitProvider, darkTheme } from '@rainbow-me/rainbowkit';
export const App = () => (
{/* Your App */}
);
To change de modal size
export const App = () => (
{/* Your App */}
);
Localization
export const App = () => (
{/* Your App */}
);
Using Next JS
// next.config.js
{
i18n: {
locales: ['default', 'en', 'zh-CN'],
defaultLocale: 'default',
},
}
import { RainbowKitProvider, Locale } from '@rainbow-me/rainbowkit';
export const App = () => {
const { locale } = useRouter() as { locale: Locale };
return (
{/* Your App */}
)
};
Modal hooks
import {
useConnectModal,
useAccountModal,
useChainModal,
} from '@rainbow-me/rainbowkit';
export const YourApp = () => {
const { openConnectModal } = useConnectModal();
const { openAccountModal } = useAccountModal();
const { openChainModal } = useChainModal();
return (
<>
{openConnectModal && (
)}
{openAccountModal && (
)}
{openChainModal && (
)}
>
);
};
Customization of the Connect Button
import { ConnectButton } from '@rainbow-me/rainbowkit';
export const YourApp = () => { return (
{({
account,
chain,
openAccountModal,
openChainModal,
openConnectModal,
authenticationStatus, mounted,
}) => {
// Note: If your app doesn't use authentication, you
// can remove all 'authenticationStatus' checks
const ready = mounted && authenticationStatus !== 'loading';
const connected =
ready &&
account &&
chain &&
(!authenticationStatus ||
authenticationStatus === 'authenticated'); return (
{(() => {
if (!connected) {
return (
);
}
if (chain.unsupported) { return (
);
}
return (
);
})()}
);
}}
);
};
Adding a custom Chain
import {
RainbowKitProvider,
getDefaultConfig,
Chain,
} from '@rainbow-me/rainbowkit';
import { WagmiProvider } from 'wagmi';
import {
QueryClientProvider,
QueryClient,
} from "@tanstack/react-query";
const avalanche = {
id: 43_114,
name: 'Avalanche',
iconUrl: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5805.png',
iconBackground: '#fff',
nativeCurrency: { name: 'Avalanche', symbol: 'AVAX', decimals: 18 },
rpcUrls: {
default: { http: ['https://api.avax.network/ext/bc/C/rpc'] },
},
blockExplorers: {
default: { name: 'SnowTrace', url: 'https://snowtrace.io' },
},
contracts: {
multicall3: {
address: '0xca11bde05977b3631167028862be2a173976ca11',
blockCreated: 11_907_934,
},
},
} as const satisfies Chain;
const config = getDefaultConfig({
appName: 'My RainbowKit App',
projectId: 'YOUR_PROJECT_ID',
chains: [avalanche],
});
const queryClient = new QueryClient();
const App = () => {
return (
{/* Your App */}
);
};
The abstraction provided by the library is very useful, so you only need to know the basics. You can have a Web3 wallet management system up and running in just a few minutes.
Fuente: https://www.rainbowkit.com/docs/introduction
- August 15, 2024