3. Obtener Datos de la Cadena
En el tercer capítulo del tutorial sobre construir una dapp de extremo a extremo en Aptos, aprenderás a obtener datos de la cadena.
Nuestra lógica de interfaz de usuario depende de si la cuenta conectada ha creado una lista de tareas. Si la cuenta ha creado una lista de tareas, nuestra aplicación debería mostrar esa lista; si no, la aplicación debería mostrar un botón ofreciendo la opción de crear una nueva lista.
Para eso, primero necesitamos verificar si la cuenta conectada tiene un recurso TodoList. En nuestro contrato inteligente, cada vez que alguien crea una lista de tareas creamos y asignamos un recurso TodoList a su cuenta.
Para obtener datos de la cadena, podemos usar el SDK de TypeScript de Aptos. El SDK proporciona clases y funciones para que podamos interactuar y consultar fácilmente la cadena de Aptos.
Para comenzar:
- Detén el servidor local si está ejecutándose.
- Importa wallet del proveedor React del adaptador de billetera:
import { useWallet } from "@aptos-labs/wallet-adapter-react";- Extrae el objeto account del adaptador de billetera:
function App() { const { account } = useWallet();}El objeto account es null si no hay una cuenta conectada; cuando una cuenta está conectada, el objeto account contiene la información de la cuenta, incluyendo la dirección de la cuenta.
- A continuación, queremos obtener el recurso TodoList de la cuenta.
Comienza importando
useEffectusandoimport { useEffect } from "react";Agreguemos un hookuseEffecta nuestro archivo que llamaría a una función para obtener el recurso cada vez que cambie nuestra dirección de cuenta:
function App() { import { useEffect } from "react" ... useEffect(() => { fetchList(); }, [account?.address]); ...}- Antes de crear nuestra función
fetchList, también creemos un estado local para almacenar si la cuenta tiene una lista:
function App() { ... const [accountHasList, setAccountHasList] = useState<boolean>(false); ...}también importa useState usando
import { useState, useEffect } from "react";
- Importa la variable
MODULE_ADDRESSusandoimport { MODULE_ADDRESS } from "./constants";. Esta es la dirección del módulo que publicamos en el capítulo anterior. - Importa
aptosClientusandoimport { aptosClient } from "./utils/aptosClient";. Este es un cliente quecreate-aptos-dappcreó para nosotros para interactuar con la cadena. - Nuestro hook
useEffectestá llamando a una funciónfetchList; vamos a crearla:
const fetchList = async () => { if (!account) return []; const moduleAddress = MODULE_ADDRESS; try { const todoListResource = await aptosClient().getAccountResource( { accountAddress:account?.address, resourceType:`${moduleAddress}::todolist::TodoList` } ); setAccountHasList(true); } catch (e: any) { setAccountHasList(false); }};Repasemos el código de la función fetchList.
Primero, usamos la propiedad account de nuestro proveedor de billetera para asegurarnos de que hay una cuenta conectada a nuestra aplicación.
Luego, usamos el método getAccountResource de aptosClient para obtener el recurso de la cuenta. Esta función toma la dirección de la cuenta y el tipo de recurso que queremos obtener.
Si la función se ejecuta exitosamente, significa que la cuenta tiene un recurso TodoList, así que establecemos accountHasList a true.
Si la función falla (i.e., arroja un error), significa que la cuenta no tiene un recurso TodoList, así que establecemos accountHasList a false.
- Ahora, actualicemos nuestra interfaz de usuario para mostrar contenido diferente basado en el estado
accountHasList:
function App() { ... return ( <> <TopBanner /> <Header /> <div className="flex items-center justify-center flex-col"> {!accountHasList ? ( <div> <h2>Crear una nueva lista</h2> <Button>Agregar nueva lista</Button> </div> ) : ( <div> <h2>Mi Lista de Tareas</h2> <p>Aquí estarán tus tareas...</p> </div> )} </div> </> );}- No olvides importar el componente
Button. Agrégalo a tus importaciones:
import { Button } from "@/components/ui/button";¡Excelente! Ahora nuestra aplicación puede verificar si una cuenta conectada tiene una lista de tareas y mostrar contenido diferente basado en eso.
En el siguiente capítulo, aprenderemos cómo enviar datos a la cadena para crear una nueva lista de tareas.