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

React使用Redux时报TypeError: Cannot read property 'address' of null如何解决

问题原因&修复方案
  • 核心问题出在store.js的拼写错误:你判断localStorage是否存在收货地址时用的key是shippingAddress,但后续JSON.parse取值时错误写成了shippingAdress(正确拼写为Address,少写了第二个d),所以当localStorage里有对应字段时,读取错误key会返回null,导致redux初始化时shippingAddress被赋值为null,渲染页面时读取null.address就会抛出你遇到的类型错误。删除localStorage后代码会走默认空对象逻辑,所以功能恢复正常。
  • 次要问题是代码健壮性不足:ShippingScreen组件中直接读取shippingAddress的属性,没有做空值兼容,只要shippingAddress为空就会报错。

修复步骤

步骤1:修正store.js的拼写错误

把store.js中读取收货地址的代码:

const shippingAddressFromStorage = localStorage.getItem('shippingAddress')
? JSON.parse(localStorage.getItem('shippingAdress'))
: {};

替换为正确拼写的版本:

const shippingAddressFromStorage = localStorage.getItem('shippingAddress')
? JSON.parse(localStorage.getItem('shippingAddress'))
: {};

步骤2:给ShippingScreen添加空值兼容

修改ShippingScreen中状态初始化的代码,用可选链+空值合并运算符兜底,避免shippingAddress为空时报错:

const [address, setAddress] = useState(shippingAddress?.address ?? '');
const [city, setCity] = useState(shippingAddress?.city ?? '');
const [postalCode, setPostalCode] = useState(shippingAddress?.postalCode ?? '');
const [country, setCountry] = useState(shippingAddress?.country ?? '');

另外你粘贴的cartAction.js代码和cartReducer完全重复,属于粘贴失误,自己替换成正确的action代码即可,不影响本次问题的修复。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 07:36:04