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

如何在React自定义Hook中用useMemo返回undefined值?

问题排查与解决

你的问题出在useMemo的回调函数没有正确返回对象。

看你注释掉的代码:

useMemo(() => { numberOfNft, maxNft, presaleStarted, presaleEnded }, [numberOfNft, maxNft, presaleStarted, presaleEnded])

这里箭头函数用大括号{}包裹内容时,JavaScript会把它当成代码块,而非对象字面量。代码块里没有写return语句,所以回调函数默认返回undefined,这就是useMemo无法正常工作的核心原因。

修正方案

有两种方式可以解决这个语法问题:

1. 显式添加return语句

return useMemo(() => { 
  return { numberOfNft, maxNft, presaleStarted, presaleEnded } 
}, [numberOfNft, maxNft, presaleStarted, presaleEnded])

2. 用小括号包裹对象(消除语法歧义)

return useMemo(() => ({ 
  numberOfNft, maxNft, presaleStarted, presaleEnded 
}), [numberOfNft, maxNft, presaleStarted, presaleEnded])

额外优化建议

你的四个变量都来自data,可以直接把data作为useMemo的依赖项,减少依赖项数量的同时写法更简洁:

export function useCryptoDevs() {
    // (...)
    const { data } = useContractReads(/* ... */)

    return useMemo(() => ({
        numberOfNft: data?.[0],
        maxNft: data?.[1],
        presaleStarted: data?.[2],
        presaleEnded: data?.[3]
    }), [data])
}

内容的提问来源于stack exchange,提问作者Fabien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:50:26