You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在组件加载及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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:33:11