如何在组件加载及updateAssets调用后触发useOwnedAssets Hook
实现组件加载触发Hook + updateAssets后重新计算的方法
情况1:如果SDK的useOwnedAssets Hook自带刷新/重新获取方法
部分SDK的React Hook会返回专门的刷新函数(比如refetch),先查SDK文档确认是否有这类方法。如果有,直接在updateAssets()执行完成后调用它即可:
import { useOwnedAssets } from 'somesdk/react' function YourComponent() { // 解构出SDK提供的刷新函数(比如refetch) const { data: ownedNFTs, isLoading, error, refetch } = useOwnedAssets(foo, bar) const handleUpdateAssets = async () => { try { await updateAssets() // 资产更新完成后,调用刷新函数重新获取数据 await refetch() } catch (err) { console.error('更新资产失败:', err) } } return ( <button onClick={handleUpdateAssets}>更新资产</button> {/* 其他组件内容 */} ) }
情况2:SDK Hook无自带刷新方法,手动用状态触发重新计算
如果SDK的useOwnedAssets没提供刷新函数,我们可以添加一个状态变量作为Hook的依赖项,通过改变状态值触发Hook重新执行:
import { useState, useCallback } from 'react' import { useOwnedAssets } from 'somesdk/react' function YourComponent() { // 定义用于触发刷新的状态,初始值随便设,只要变化就能触发更新 const [refreshFlag, setRefreshFlag] = useState(0) // 将refreshFlag作为useOwnedAssets的额外依赖,状态变化时Hook会重新执行 const { data: ownedNFTs, isLoading, error } = useOwnedAssets(foo, bar, refreshFlag) // 若Hook依赖数组是单独传入的,就改成这种写法: // const { ... } = useOwnedAssets({ foo, bar }, [refreshFlag]) const handleUpdateAssets = useCallback(async () => { try { await updateAssets() // 修改状态值,触发Hook重新请求数据 setRefreshFlag(prev => prev + 1) } catch (err) { console.error('更新资产失败:', err) } }, []) return ( <button onClick={handleUpdateAssets}>更新资产</button> {/* 其他组件内容 */} ) }
注意事项
- 先确认
useOwnedAssets的依赖规则:如果foo/bar是和资产关联的变量,也可以考虑在updateAssets后更新这些变量来触发Hook,但如果这些变量本身不需要改动,用状态触发更稳妥。 - 用
useCallback包裹handleUpdateAssets,避免组件每次渲染都创建新函数,优化性能。
内容的提问来源于stack exchange,提问作者grabury
相关产品推荐
相关产品推荐

