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

LWC父子组件通信问题:子组件无法获取父组件Apex返回数据

解决LWC父子组件异步数据传递的undefined问题

问题原因

父组件的@wire调用是异步执行的,而子组件的connectedCallback在组件挂载时立即触发——此时父组件还未从Apex接口拿到数据,currentUserProjects尚未被赋值,因此子组件的@api projects自然返回undefined。

解决方案

1. 子组件监听projects属性的更新(推荐)

通过给@api属性设置getter/setter,在数据传递过来时自动触发逻辑,无需依赖生命周期钩子:

import { LightningElement, api } from 'lwc';

export default class ChildComponent extends LightningElement {
    _projects;

    @api 
    get projects() {
        return this._projects;
    }
    set projects(value) {
        this._projects = value;
        // 数据更新时执行逻辑
        if (value) {
            console.log(this._projects);
            // 这里写需要用到projects的业务代码
        }
    }
}

2. 父组件加条件渲染,确保数据加载完成再渲染子组件

在父模板中通过if:true判断,只有当currentUserProjects存在数据时才渲染子组件,这样子组件初始化时就能拿到完整数据:

<template>
    <!-- 仅当数据存在时渲染子组件 -->
    <c-child-component if:true={currentUserProjects} projects={currentUserProjects}></c-child-component>
</template>

父组件JS保持原有逻辑即可:

import { LightningElement, wire } from 'lwc';
import getProjectsForYear from '@salesforce/apex/ProjectController.getProjectsForYear';

export default class ParentComponent extends LightningElement {
    currentUserProjects;

    @wire(getProjectsForYear, { year: 2024 })
    wiredProjects({ error, data }) {
        if (data) {
            this.currentUserProjects = data;
            console.log(this.currentUserProjects);
        } else if (error) {
            // 处理错误逻辑
        }
    }
}

3. 子组件用renderedCallback结合状态判断

如果需要在渲染阶段处理数据,可以用renderedCallback,但要加状态变量避免重复执行:

import { LightningElement, api } from 'lwc';

export default class ChildComponent extends LightningElement {
    @api projects;
    hasProcessedData = false;

    renderedCallback() {
        if (this.projects && !this.hasProcessedData) {
            console.log(this.projects);
            // 执行数据相关逻辑
            this.hasProcessedData = true;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:52:44