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

在React+TypeScript中调用Lit Web Component回调函数的问题

问题描述

我使用Lit开发了一个接收函数作为输入属性的Web Component,在Vue 3中测试时successCallback回调函数可以正常触发,但在React+TypeScript项目中该回调却无法运行。以下是我的React代码:

import React, { FC } from 'react';
import '@webcomponents/widgets'
declare global {
    namespace JSX {
        interface IntrinsicElements {
            'webcomponents-widgets': WidgetProps
        }
    }
}
interface WidgetProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement> {
    var1: string,
    successCallback: Function,
}
const App = () =>{
   const onSuccessCallback = () =>{
       console.log("add some logic here");
   }
   return(<webcomponents-widgets var1="test" successCallBack={onSuccessCallback}></webcomponents-widgets>)
}

请问如何让React组件中的该回调函数被触发?是否遗漏了相关配置?

解决方案

导致回调无法触发有两个核心问题,对应修复方式如下:

  1. 修正属性名拼写错误
    你在JSX中传递的属性是successCallBack(Call的首字母大写),但接口定义的属性名是successCallback(callback为全小写后缀),两者不匹配。先将JSX中的属性名修正为successCallback。

  2. 通过Ref手动传递函数属性
    React对自定义元素的函数属性支持存在局限,不会自动将函数作为自定义属性绑定到元素上,需要通过ref配合useEffect手动赋值:

import React, { FC, useRef, useEffect } from 'react';
import '@webcomponents/widgets'
declare global {
    namespace JSX {
        interface IntrinsicElements {
            'webcomponents-widgets': WidgetProps
        }
    }
}
// 替换宽泛的Function类型为具体的函数类型,提升类型安全性
interface WidgetProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement> {
    var1: string,
    successCallback: () => void,
}
const App = () =>{
   const widgetRef = useRef<HTMLElement>(null);
   const onSuccessCallback = () =>{
       console.log("add some logic here");
   }

   useEffect(() => {
     if (widgetRef.current) {
       // 直接给自定义元素实例绑定回调属性
       (widgetRef.current as any).successCallback = onSuccessCallback;
     }
   }, [onSuccessCallback]);

   return(<webcomponents-widgets ref={widgetRef} var1="test"></webcomponents-widgets>)
}

补充说明:如果你的Lit组件是通过@property()装饰器定义的successCallback属性,其对应的HTML原生属性名为success-callback,但即使使用短横线形式在JSX中传递,React仍可能无法正确处理函数类型的属性,因此使用Ref手动绑定是更可靠的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:40:23