开发者问题收集

React 从本地存储获取对象的值

2022-04-16
65

我从 localstorage 获取数据。 我使用了 useEffect。但是当我想获取对象中的值时,我遇到了问题。

const [carinfo, setCarInfo] = useState(); 

useEffect(() => { 
  const storedData = JSON.parse(localStorage.getItem("carData"));
  setCarInfo(storedData); 
  console.log(storedData.brand); 
}, []);

console.log(carinfo.brand);

console.log(storedData.brand) is working.

No console.log(carinfo.brand) is not working

我遇到了这个错误

Uncaught TypeError: Cannot read properties of undefined (reading 'brand')

3个回答

我怀疑您收到错误是因为效果尚未发生。您的组件首次呈现时,carinfo 未定义。

您可以为 state 设置初始值以解决此问题:

const [carinfo, setCarInfo] = useState({});
Gøran Cantona
2022-04-16

您的 console.log(carinfo.brand)useEffect 之前执行。 这意味着您在设置 carinfo 之前尝试访问其值。
解决方案 1:将 console.log(carinfo.brand) 放在 useEffect 内>

解决方案 2:如果您需要 useEffect 之外的 carinfo ,请将其写入函数内并在设置 carinfo 值后调用该函数

Pavan Aditya M S
2022-04-16

在初始渲染时, carinfo 的值将与您用来调用 useState 的值匹配。

useState() 相当于 useState(undefined)undefined 是一个没有 brand 属性的值。

useEffect 将触发,然后使用 localStorage 中的任何值更新状态,前提是它与您预期的数据结构匹配(您可能需要考虑创建一种更安全的方式访问 localStorage

尽管如此,只有在初始渲染之后才会设置状态,然后您才可能在 carinfo 中获得预期的值。

您可以使用可选链来保护自己, console.log(carinfo?.brand) 或其他方式来处理未定义的情况。

wlh
2022-04-16