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

React中使用array.length获取投票数返回undefined如何解决

问题根因
  • 接口返回的likes为对象结构,对象原生不支持length属性,直接赋值给数组类型的blogVotes状态后,调用length会返回undefined,无法正常计数。
  • useEffect依赖逻辑错误:blogVotes是effect内部更新的状态,加入依赖项会触发无限循环;同时React状态更新是异步的,调用setBlogData后立即读取blogData拿不到最新值。
修复方案

先使用Object.values()将likes对象转换为数组,再赋值给状态,就能正常用length获取投票总数,同时修正useEffect的依赖与逻辑:

const blogItems = useSelector((state) => state.blogs);

const [blogData, setBlogData] = useState([]);
const [blogVotes, setBlogVotes] = useState([]);
useEffect(() => {
    setBlogData(blogItems);
    // 直接从最新的blogItems取值,规避状态更新异步问题
    const targetBlog = blogItems.items?.find(blog => blog.id === 1);
    // 对象转数组,无数据时兜底为空数组
    const formattedLikes = targetBlog?.likes ? Object.values(targetBlog.likes) : [];
    setBlogVotes(formattedLikes);
// 移除无效依赖,避免循环触发
}, [blogItems]);

渲染部分直接使用即可输出预期效果:

<p>Votes: {blogVotes.length}</p>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:27:03