Salesforce知识点:LWC(Lightning Web Components)面试题及答案

LWC(Lightning Web Components)面试题及答案

Lightning Web Components(LWC)是Salesforce推出的基于现代Web标准的前端框架,已成为Salesforce前端开发的主流技术。以下是LWC面试中常见的问题及详细解答,涵盖基础概念、组件通信、数据交互等核心知识点。

1. 什么是LWC?它与Aura组件有何区别?

答案
LWC是Salesforce基于现代Web标准(ES6+、Shadow DOM、Custom Elements)开发的轻量级组件框架,用于构建高性能的Salesforce界面。

与Aura组件的主要区别:

  • 架构基础:LWC基于原生Web标准,无需额外框架抽象;Aura是Salesforce自定义框架,有自己的抽象层
  • 性能:LWC更轻量,加载速度更快,执行效率更高
  • 语法:LWC使用标准JavaScript类和HTML,学习曲线平缓;Aura使用自定义语法(如{!v.attribute}
  • 互操作性:LWC可以嵌入Aura组件,但Aura组件不能嵌入LWC
  • 开发体验:LWC支持现代开发工具和特性(如模块、装饰器),Aura则相对陈旧

2. LWC的组件结构是什么样的?每个文件的作用是什么?

答案
一个完整的LWC组件包含以下文件(均使用相同的组件名):

  • .html:组件的模板文件,定义UI结构,支持数据绑定和指令
  • .js:组件的逻辑文件,包含属性定义、方法和生命周期钩子
  • .js-meta.xml:组件的元数据文件,定义组件的配置(如API版本、可见性、可在哪些页面使用)
  • 可选的.css:组件的样式文件,样式被Shadow DOM隔离,仅作用于当前组件

示例结构:

myComponent/
├── myComponent.html
├── myComponent.js
├── myComponent.js-meta.xml
└── myComponent.css

3. LWC中如何实现父子组件通信?

答案
LWC遵循单向数据流原则,父子组件通信方式如下:

父组件向子组件传递数据

通过公共属性(public properties) 实现,子组件使用@api装饰器声明可接收的属性:

// 子组件:childComponent.js
import {
   
    LightningElement, api } from 'lwc';
export default class ChildComponent extends LightningElement {
   
   
    @api message; // 声明可从父组件接收的属性
    @api userInfo; // 可以接收复杂类型
}

父组件在引用子组件时传递数据:

<!-- 父组件:parentComponent.html -->
<c-child-component 
    message="Hello from Parent"
    user-info={currentUser}
></c-child-component>

子组件向父组件传递数据

通过自定义事件(CustomEvent) 实现,父组件监听事件并处理数据:

// 子组件:childComponent.js
handleClick() {
   
   
    // 创建自定义事件,通过detail传递数据
    const event = new CustomEvent('notify', {
   
   
        detail: {
   
    
            selectedId: '123',
            value: 'some data'
        },
        bubbles: false, // 是否冒泡
        composed: false // 是否穿透Shadow DOM
    });
    this.dispatchEvent(event); // 触发事件
}

父组件监听并处理事件:

<!-- 父组件:parentComponent.html -->
<c-child-component onnotify={handleNotification}></c-child-component>
// 父组件:parentComponent.js
handleNotification(event) {
   
   
    console.log('Received data:', event.detail.selectedId);
    console.log('Received value:', event.detail.value);
}

4. LWC的生命周期钩子有哪些?各自的使用场景是什么?

答案
LWC提供以下核心生命周期钩子:

  1. constructor()

    • 调用时机:组件初始化时(实例创建时)
    • 用途:初始化变量和状态
    • 限制:不能访问DOM,不能访问@api属性,不能调用Apex方法
  2. connectedCallback()

    • 调用时机:组件被插入到DOM中时
    • 用途:执行初始化逻辑,如加载数据(调用Apex)、设置事件监听
    connectedCallback() {
         
         
        this.loadData(); // 加载数据
        window.addEventListener('resize', this.handleResize);
    }
    
  3. disconnectedCallback()

    • 调用时机:组件从DOM中移除时
    • 用途:清理资源,如移除事件监听、清除定时器
    disconnectedCallback() {
         
         
        window.removeEventListener('resize', this.handleResize);
        clearInterval(this.timer);
    }
    
  4. renderedCallback()

    • 调用时机:组件渲染完成或重新渲染后
    • 用途:执行依赖DOM的操作
    • 注意:需要避免在此处修改会触发重渲染的属性,防止无限循环
  5. errorCallback(error, stack)

    • 调用时机:组件或其子组件抛出错误时
    • 用途:错误处理和日志记录
    errorCallback(error, stack) {
         
         
        this.error = error.message;
        console.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liquad Li 李庆军

您的鼓励是我创作的动力哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值