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

React项目导入web组件vue-advanced-chat时如何传递数组对象参数

问题原因

React默认会将JSX中给自定义Web组件传递的非字符串/数字类型属性序列化为字符串,你直接写rooms={room}会被转为"[object Object]"这类无效值,vue-advanced-chat组件无法识别。

解决方法

通过ref获取web组件的真实DOM实例,直接给实例赋值属性,全React版本兼容,代码修正如下:

import React, { useRef, useEffect } from "react";
import "../../../node_modules/vue-advanced-chat/dist/vue-advanced-chat.js";

// React组件首字母需要大写,否则会被识别为原生标签
function Test() {
    // 绑定web组件的ref
    const chatRef = useRef(null);
    const rooms = [
        {
            roomId: 1,
            roomName: "Room 1",
        }
    ];
    const messages = [];

    useEffect(() => {
        if (chatRef.current) {
            // 直接给DOM实例赋值属性,不走React的序列化逻辑
            chatRef.current.currentUserId = "12";
            chatRef.current.rooms = rooms;
            chatRef.current.messages = messages;
            // 其他非字符串类型参数都可以用这种方式赋值
        }
    // 依赖项添加需要同步的变量,数据变更后会自动更新
    }, [rooms, messages])

    return (
        <div>
            <vue-advanced-chat ref={chatRef}></vue-advanced-chat>
        </div>
    );
}
export default Test;

补充说明

  • 如果你的rooms、messages等数据会动态更新,只要把变量加到useEffect的依赖数组中即可实现自动同步
  • React 18及以上版本也支持直接给自定义Web组件传递对象/数组类型属性,但兼容性不如ref赋值方案,更推荐用上述写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:15:04