使用 Web3-React 更快地开发 dApp 前端

2023-02-19 0 428

使用 Web3-React 更快地开发 dApp 前端
使用 Web3-React 更快地开发 dApp 前端

责任编辑产品目录

甚么是 Web3 化学反应?

为甚么采用 Web3-react 可能将是两个更快的点子?

加装 web3-react

相连手提包第 1 步:增设 Web3ReactProvider第 2 步:增设挂勾

合约中的随机存取高度计诗歌创作

甚么是 Web3-React?

Web3-react 是两个如前所述 React 的架构,有利于精简 dApp 的后端合作开发。

Web3-react 还甘当自动机,用作保护与您的 dApp 有关的统计数据,并将其转化成模块根上任何人须要的边线。Web3-React 全力支持多种不同手提包,从 Metamask 和 Coinbase 等应用程序手提包到 Trezor 和 Ledger 等硬体手提包。

在 Web3 中,我们采用 Web3-Modal 在 dApp 中进行手提包相连。Web3-模态非常适合初学者,但随着我们扩展项目,处理 Web3-模态变得更加困难。

因此,web3-react 可能将是两个更快的选择,因为:

更适合构建现代 dApp

拥有更快的合作开发人员体验

减少代码冗余

并且是两个直观的架构,可以采用

为甚么采用 Web3-react 可能将是两个更快的选择?

Web3-React 在许多方面提供了灵活性。如前所述,它对许多手提包都有很好的全力支持。

但即使手提包不包含在 web3-react 包中,您也可以创建自定义相连器并相连 web3-react 列出的手提包以外的手提包!

Web3-react 在引擎盖下采用以太币.js或 Web3.js从而提供流畅的体验,因为采用以太币相连手提包.js可能将是两个非常痛苦的过程。

注意:在继续之前,请确保您了解 ContextAPI,换句话说,采用上下文钩子。这是 Web3-React 的关键功能。

加装 web3-react

让我们加装 web3-react!

在责任编辑中,我们假设您已经增设了 ReactJS/NextJS 应用程序。

在您的应用产品目录中,运行以下命令以加装 web-react:

npm install @web-react/core

或者

yarn add @web3-react/core

现在,为了相连如前所述应用程序的手提包,我们须要加装以下 web3-react 包:

npm install @web3-react/injected-connector

或者

yarn add @web3-react/injected-connector

和。您拥有将dApp相连到应用程序手提包所需的所有成分!让我们开始编写代码来相连手提包!

相连手提包

本部分假定你已创建应用并加装了以前的依赖项。现在它已经解决了,让我们直接进入这个!

第 1 步:增设Web3ReactProvider

让我们跳到文件夹下的(下一步)文件!_app.jspages

编辑代码,使其如下所示:

import ../styles/globals.cssimport { Web3ReactProvider } from @web3-react/coreimport { providers, Web3Provider } from ethersfunction getLibrary(provider, connector) { return new providers.Web3Provider(provider)}function MyApp({ Component, pageProps }) { return( <Web3ReactProvider getLibrary={getLibrary}> <Component {…pageProps} /> </Web3ReactProvider> )}export default MyApp

完成?现在让我们了解代码!

此函数返回提供程序对象。

function getLibrary(provider, connector) { return new providers.Web3Provider(provider)}

Web3ReactProvider 是上下文提供程序,它将所有统计数据传递到模块根上。

function MyApp({ Component, pageProps }) {return ( <Web3ReactProvider getLibrary={getLibrary}> <Component {…pageProps} /> </Web3ReactProvider> )}

第 2 步:增设挂勾

现在让我们跳到您的文件夹中。index.jspages

import Head from next/headimport Image from next/imageimport styles from ../styles/Home.module.cssimport { InjectedConnector } from @web3-react/injected-connectorimport { useWeb3React } from @web3-react/coreimport { useState } from reactimport { CONTRACT_ADDRESS, CONTRACT_ABI } from ../constantsexport default function Home() { const [ result, setResult ] = useState(“”) // web3-react hook, helps in fetching // the data passed by Web3ReactProvider const { active, activate, deactivate, account, library, connector, error } = useWeb3React() // injected provider identifier const injected = new InjectedConnector( { supportedChainIds:[80001] } ) const connectWallet = async () => { try { await activate(injected) } catch (err) { console.error(err) } } const disconnectWallet = async () => { try { deactivate(injected) } catch (err) { console.error(err) } }return ( <div className={styles.container}> <Head> <title>Create Next App</title> <meta name=”description” content=”Generated by create next app” /> <link rel=”icon” href=”/favicon.ico” /> </Head> <button onClick={connectWallet}>Connect Wallet</button> {active? <span>Connected with <b>{account}</b></span>: <span>Not Connected</span>} <button onClick={disconnectWallet}>Disconnect Wallet</button> </div> )}

好的,现在让我们看看 useWeb3React hook

const { active, activate, deactivate, account, library, connector, error } = useWeb3React()

useWeb3React是来自 Web-React 库的自定义钩子,它返回了许多有用的功能。

此钩子返回:

connector; // connector object returns some useful connection // methods like activate() and deactivate() library; // library is the provider object that we // passed with the Web3ReactProvider chainId; // returns the chainId for the account that // is connected to the dApp account; // the account address of the connected account active; // active is a state variable which returns boolean values // that determines whether the wallet connection is // active or inactive error; // returns any error happening with the wallet connection

现在让我们看看转化成的变量

const injected = new InjectedConnector({ supportedChainIds:[80001]})// we can list multiple networks by listing their// chainIds, separated by comma

转化成相连器是两个类,它接受全力支持的 chainIds 的输入并返回一组与应用程序手提包交互的方法。

如果手提包未相连到正确的网络,它将返回错误。可以从挂勾返回的对象访问此错误。UnsupportedChainIderroruseWeb3React

至于 和 ,它们是相连或断开转化成的提供程序(应用程序手提包)的方法。activate(injected)deactivate(injected)

您已经准备好了手提包相连增设!

合约中的随机存取

现在我们已经相连了我们的手提包,剩下的就是读取和写入区块链的方式!

我们如何实现这一目标?

我们将采用 web3-react (provider) 对象从区块链读取/写入library

因此,我们将采用在LearnWeb3DAO的新生轨道中构建

在我们深入研究之前,请确保您已在文件夹(在根产品目录中)中创建了两个,并且它应该具有以下代码 –index.jsconstants

// put your contract address in place of this gibberishexport const CONTRACT_ADDRESS = “0xabcabcabcabcabcabc”;// put your abi in this variable, it will be of the form [{},{}]export const CONTRACT_ABI = […]

高度计

为了从智能合约中读取,我们须要两件事-

合约实例

供应商

因此,让我们编写两个用作从智能合约读取的函数!

const getMood = async () => { const provider = library; const contract = new Contract( CONRTACT_ADDRESS, CONTRACT_ABI, provider ); const tx = await contract.getMood(); tx.wait(); setResult(tx); }

我们将变量增设为 .请记住,是从钩子返回的,它是两个提供程序对象。很方便,不是吗?providerlibrarylibraryuseWeb3React

然后,我们创建两个新的合约实例,这使我们能够与合约进行交互。

现在是时候创建交易了!我们在这里从合约调用 getMood() 函数。

tx.wait()等待事务完成。

setResult(tx)将状态变量的值增设为 的值。resulttx

诗歌创作

为了编写智能合约,我们须要两件事——

合约实例

签名者(签署交易)

让我们创建两个写入函数!

const setMood = async ( mood ) => { const signer = await library.getSigner() const contract = new Contract( CONRTACT_ADDRESS, CONTRACT_ABI, signer ) const tx = await contract.setMood(mood) tx.wait() alert(“Mood set!”) }

现在事情变了,让我们一步一步地探索——

library是两个提供程序对象,但我们须要两个签名者,对吧?好吧,提供程序对象具有两个名为的方法,该方法返回附加到此提供程序的签名者对象!getSigner()

这是两个合约实例,但在这里,我们传递的不是提供者,而是签名者,因为为了编写事务,我们须要签名者来签署事务。contract

最后,我们现在向合约函数传递了两个参数,因为来自合约的函数须要两个参数来增设情绪。

您已经采用 web3-react制作了两个 dApp 后端!它也可以在区块链上读取和写入!

结论

Web3-react 是两个非常方便的架构,用作在 React/NextJS 中构建 dApp 后端。

这是两个非常易于采用的工具,但对于初学者来说可能将会令人困惑。要采用此工具,您可能将须要一些上下文 API 知识。

Web3 是未来世界一大变数,我想帮助更多人了解并加入 Web3,如果你对 Web3 感兴趣,记得关注我~

头条: 程序猿最幽默

一起沉淀、一起成长、一起拥抱未来。

举报/反馈

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务