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

React传入预期有效对象却抛出TypeError:无法读取code属性

问题分析与解决

问题原因

你遇到的核心问题是组件首次渲染时传入的json参数为undefined。虽然后续API返回数据后json.wrapper变成了有效对象,但React的初始渲染已经触发了json.code的读取操作,直接导致报错。

至于控制台能打印出有效值,是因为浏览器控制台的异步特性:它会在对象更新后显示最新状态,而非打印瞬间的快照。如果改成console.log('Wrapper:', JSON.stringify(json.wrapper)),就能看到初始渲染时的真实值(大概率是undefined)。

解决方案

以下几种方式都能解决这个问题,按需选择即可:

1. 使用可选链操作符(推荐)

在读取属性时添加可选链,避免undefined触发报错:

export function Wrapper({ json }) {
    console.log('Wrapper:', json)
    return (
        <>
        <div className="label">
            Code:
            <input
                className="editable"
                type="text"
                defaultValue={json?.code}
            />
        </div>
        </>
    )
} 

2. 组件内条件渲染

确保json存在后再渲染内容,也可以替换成加载状态组件:

export function Wrapper({ json }) {
    console.log('Wrapper:', json)
    if (!json) return null;
    return (
        <>
        <div className="label">
            Code:
            <input
                className="editable"
                type="text"
                defaultValue={json.code}
            />
        </div>
        </>
    )
} 

3. 给组件参数设置默认值

在组件定义时给json设置空对象默认值,避免读取属性时出错:

export function Wrapper({ json = {} }) {
    console.log('Wrapper:', json)
    return (
        <>
        <div className="label">
            Code:
            <input
                className="editable"
                type="text"
                defaultValue={json.code}
            />
        </div>
        </>
    )
} 

4. 父组件条件渲染子组件

确保json.wrapper存在后再渲染Wrapper组件:

<div className="label">
  Wrapper:
  {console.log('Wrapper:', json.wrapper)}
  {json.wrapper && <Wrapper json={json.wrapper} />}
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:46:06