Sui提供dApp Kit 助力快速构建React Apps和dApps

本文主要是介绍Sui提供dApp Kit 助力快速构建React Apps和dApps,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

近日,Mysten Labs推出了dApp Kit,这是一个全新的解决方案,可用于在Sui上开发React应用程序和去中心化应用程序(dApps)。@mysten/dapp-kit是专门为React定制的全新SDK,旨在简化诸如连接钱包、签署交易和从RPC节点获取数据等重要任务。dApp Kit提供了可主题化的预构建组件,以简化钱包交互,还提供了更低级别的hooks和实用工具,以简化创建自定义组件。

dApp kit是从Mysten Labs的经验中提炼出的,旨在让每个人更容易地开始构建dApps。事实上,Mysten Labs正在开始在所有自己的dApps中使用dApp kit。从Sui Explorer到Sui Wallet,他们构建的每个app都使用了dApp kit。我们才刚刚开始,但很高兴分享这个工具包,并帮助更多的开发者使用它!

有关dApp Kit的详细介绍,请查看完整文档。本文,我们将向您介绍如何在React项目中设置dApp Kit。

第一步:安装

要开始使用dApp Kit,首先需要安装它以及react-query:

npm install - save @mysten/dapp-kit @mysten/sui.js @tanstack/react-query

安装完成后,您需要在应用程序中设置一些提供程序,以确保dApp Kit能够正常运行:

import '@mysten/dapp-kit/dist/index.css';import { SuiClientProvider, WalletProvider } from '@mysten/dapp-kit';
import { getFullnodeUrl } from '@mysten/sui.js/client';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';const queryClient = new QueryClient();
const networks = {localnet: { url: getFullnodeUrl('localnet') },devnet: { url: getFullnodeUrl('devnet') },testnet: { url: getFullnodeUrl('testnet') },mainnet: { url: getFullnodeUrl('mainnet') },
};ReactDOM.createRoot(document.getElementById('root')!).render(<QueryClientProvider client={queryClient}><SuiClientProvider networks={networks} defaultNetwork="devnet"><WalletProvider><App /></WalletProvider></SuiClientProvider></QueryClientProvider>,
);

在这段代码中,您会:

  • 导入必要的dApp Kit CSS以正确渲染组件
  • 设置一个react-query提供程序,用于管理dApp Kit发出的请求的状态
  • 初始化SuiClientProvider,它提供了SuiClient的实例并管理连接的网络
  • 配置WalletProvider,负责管理钱包连接

现在,app已经正确设置,您可以开始使用dApp Kit的功能。

第二步:连接钱包

要让用户能够将他们的Sui钱包连接到dApp,您可以轻松地添加一个ConnectButton:

import { ConnectButton } from '@mysten/dapp-kit';function App() {return (<div><nav><ConnectButton /></nav><section>Hello, world</section></div>);
}

这段代码将渲染一个按钮,点击它会打开一个模态框,提示用户连接他们的钱包。一旦连接成功,用户将看到他们已连接的钱包,并有选项再次断开连接。

第三步:管理钱包状态

dApp Kit提供了许多用于管理钱包状态的hooks。例如,useCurrentWallet允许您获取有关用户已连接账户的信息:

import { ConnectButton, useCurrentAccount } from '@mysten/dapp-kit';function App() {const account = useCurrentAccount();return (<div><nav><ConnectButton /></nav><section>{account ? 'No wallet connected' : `Your address is ${account.address}`}</section></div>);
}

这使您能够根据用户的钱包状态显示相关信息。

第四步:获取数据

dApp Kit还为当前连接的用户提供了数据获取功能。可以使用useSuiClientQuery来调用RPC。您可以使用getOwnedObjects来访问并显示已连接账户拥有的对象列表:

import { ConnectButton, useCurrentAccount } from '@mysten/dapp-kit';function App() {const account = useCurrentAccount();return (<div><nav><ConnectButton /></nav><section>{account ? 'No wallet connected' : <OwnedObjects />}</section></div>);
}export function OwnedObjects() {const account = useCurrentAccount()!;const { data } = useSuiClientQuery('getOwnedObjects', { owner: account.address });return (<ul>{data.data.map((object) => (<li key={object.data?.objectId}>{object.data?.objectId}</li>))}</ul>);
}

您可以在文档中了解更多关于进行RPC可调用的hooks信息。

第五步:构建交易

许多dApp需要创建和签署交易区块的能力。dApp Kit通过useSignAndExecuteTransactionBlock hook简化了这个过程。让我们创建一个按钮,将SUI发送到预定义的地址:

import { signAndExecuteTransactionBlock } from '@mysten/dapp-kit';
import { TransactionBlock } from '@mysten/sui.js/transactions';export function SendSui() {const { mutateAsync: signAndExecuteTransactionBlock } = useSignAndExecuteTransactionBlock();function sendMessage() {const txb = new TransactionBlock();const coin = txb.splitCoins(txb.gas, [10]);txb.transferObjects([coin], 'Ox...');signAndExecuteTransactionBlock({transactionBlock: txb,}).then(async (result) => {alert('Sui sent successfully');});}return <button onClick={() => sendMessage()}>Send me Sui!</button>;
}

当按下按钮时,它将:

  • 创建一个新的TransactionBlock
  • 添加一个splitCoins交易,将SUI从gas coin拆分成一个新的coin
  • 添加一个新的transferObject交易,将新coin转移到另一个地址
  • 使用连接的钱包签署和执行TransactionBlock
  • 触发一个alert,让您知道交易已执行完毕

更多功能

dApp Kit还有许多其他功能,可帮助您快速轻松地构建dApps。要了解更多详细信息和高级功能,请浏览完整文档。

有兴趣为Sui Blog做出贡献吗?欢迎填写此表格。


关于 Sui Network

Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。获取更多信息:https://linktr.ee/sui_apac

官网|英文Twitter|中文Twitter|Discord|英文电报群|中文电报群

这篇关于Sui提供dApp Kit 助力快速构建React Apps和dApps的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/279421

相关文章

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.