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

React如何实现支持props与children的CopyToClipboard组件并修复报错

错误原因
  • 组件入参没有解构children属性,代码中直接引用children时会触发未定义变量的引用错误,这是你当前报错的直接诱因。
  • 现有代码仅定义了复制逻辑,但没有将复制函数绑定到子元素的点击事件上,即便修复变量问题,点击子元素也无法触发复制操作。
修复代码
import { cloneElement } from 'react';

const CopyToClipBoard = ({ text, onCopy, children }) => {
    // 限制仅支持传入单个子元素,避免逻辑异常
    if (Array.isArray(children)) {
        throw new Error('CopyToClipBoard 组件仅允许传入单个子元素');
    }

    const doCopy = async () => {
        try {
            await navigator.clipboard.writeText(text);
            // 可选链防止未传onCopy时出现报错
            onCopy?.();
        } catch (err) {
            console.error('Failed to copy: ', err);
        }
    };

    // 给传入的子元素绑定点击事件,同时兼容子元素本身的 onClick 逻辑
    const wrappedChild = cloneElement(children, {
        onClick: async (e) => {
            // 先执行子元素原有的点击事件(如果存在)
            children.props.onClick?.(e);
            await doCopy();
        }
    });

    return wrappedChild;
};

export default CopyToClipBoard;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:51:03