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

为何React中useState设默认值后仍返回undefined?

问题解决:useState变量始终为undefined及find调用报错

核心错误原因

useState 钩子的返回值是数组,而非对象。你错误地使用了对象解构语法({})来获取状态和更新函数,这会导致变量无法正确赋值,最终得到undefined。

第一个代码示例修正

原代码错误使用对象解构:

const arr = ["b", "a", "n"];
const { testing, setTesting } = useState(arr); // ❌ 对象解构不适用
console.log(Array.isArray(testing));
console.log(testing);

改为数组解构即可正常获取状态:

const arr = ["b", "a", "n"];
const [testing, setTesting] = useState(arr); // ✅ 正确的数组解构
console.log(Array.isArray(testing)); // 输出 true
console.log(testing); // 输出 ["b", "a", "n"]

第二个购物车代码修正

同样是对象解构导致cartItems为undefined,进而调用find时抛出Cannot read property 'find' of Undefined错误。

原错误代码:

const { cartItems, setCartItems } = useState([]); // ❌ 对象解构错误

修正为数组解构后,cartItems初始化为空数组,find方法可正常调用:

const [cartItems, setCartItems] = useState([]); // ✅ 正确的数组解构
console.log(Array.isArray(cartItems)); // 输出 true

const onAdd = (product) => {
  // 可选:提前判断product是否有效,避免后续错误
  if (!product?.id) return;
  
  const exists = cartItems.find((x) => x.id === product.id);
  if (exists) {
    setCartItems(
      cartItems.map((x) =>
        x.id === product.id ? { ...exists, qty: exists.qty + 1 } : x
      )
    );
  } else {
    setCartItems([...cartItems, { ...product, qty: 1 }]);
  }
};

内容的提问来源于stack exchange,提问作者Maximiliano Castrejón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:06:16