当前位置:首页 > 技术分析 > 正文内容

svelte5中使用react组件(react组件constructor)

ruisui884个月前 (02-03)技术分析23

在svelet5中导入并使用react组件库

在svelte5中当前还有问题,无法将children传递到react中渲染


  1. 使用svletkit创建项目
$ npx sv create my-svelte-react

% npx sv create my-svelte-react
┌  Welcome to the Svelte CLI! (v0.6.10)
│
◇  Which template would you like?
│  SvelteKit minimal
│
◇  Add type checking with Typescript?
│  Yes, using Typescript syntax
│
◆  Project created
│
◇  What would you like to add to your project? (use arrow keys / space bar)
│  none
│
◇  Which package manager do you want to install dependencies with?
│  pnpm
│
◆  Successfully installed dependencies
│
◇  Project next steps ─────────────────────────────────────────────────────╮
│                                                                          │
│  1: cd my-svelte-react                                                   │
│  2: git init && git add -A && git commit -m "Initial commit" (optional)  │
│  3: pnpm run dev --open                                                  │
│                                                                          │
│  To close the dev server, hit Ctrl-C                                     │
│                                                                          │
│  Stuck? Visit us at https://svelte.dev/chat                              │
│                                                                          │
├──────────────────────────────────────────────────────────────────────────╯
│
└  You're all set!

$ cd my-svelte-react

$ pnpm install

$ pnpm dev
  1. 安装react相关依赖
$ pnpm i react react-dom
$ pnpm i --save-dev @types/react @types/react-dom
$ pnpm add @vitejs/plugin-react -D
  1. 修改`vite.config.ts`增加react支持
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';  # <---- here

export default defineConfig({
	plugins: [sveltekit(), react()]        # <---- here
});
  1. 创建react svelte适配器`ReactAdapter.svelte`, 代码如下:
# src/lib/utils/ReactAdapter.svelte

<script lang="ts">
    import React from "react";
    import ReactDOM from "react-dom/client";
    import { onDestroy, onMount } from "svelte";

    const e = React.createElement;
    let container: HTMLElement;
    let root: ReactDOM.Root;

    onMount(() => {
        const { el, children, class: _, ...props } = $props;
        try {
            root = ReactDOM.createRoot(container);
            root.render(e(el, props, children));
        } catch (err) {
            console.warn(`react-adapter failed to mount.`, { err });
        }
    });

    onDestroy(() => {
        try {
            if (root) {
                root.unmount();
            }
        } catch (err) {
            console.warn(`react-adapter failed to unmount.`, { err });
        }
    });
</script>

<div bind:this={container} class={$props.class}></div>

目前此部分适配器有问题, children无法获取并且在react组件中渲染

> 参考:

> https://svelte.dev/docs/svelte/legacy-$props-and-$restProps

> https://github.com/sveltejs/svelte/issues/14929


  1. 添加react组件库, 如 [ant design](https://github.com/ant-design/ant-design)
$ pnpm add antd

# +page.svelte

<script lang="ts">
    import { Button } from "antd";
    import ReactAdapter from "$lib/utils/ReactAdapter.svelte";
</script>

<ReactAdapter el={Button} type="primary">Hello, World!</ReactAdapter>

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/872.html

标签: vite.js
分享给朋友:

“svelte5中使用react组件(react组件constructor)” 的相关文章

Excel VBA 收费单据打印/一步一步带你设计【收费管理系统】12

本文于2023年6月10日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!☆本期内容概要☆用户窗体设置:收费结算模块设置(7)单据打印大家好,我是冷水泡茶,前几期我们分享了【收费管理系统】的设计,最近一期是(Excel VBA 收费结算模块/一步一步带你设计【收费管理系统】11),...

Vue.js 组件通信的 3 大妙招

在 Vue.js 中,组件化是其核心概念之一,允许你将复杂的界面拆分成多个独立的、可复用的组件。在构建大型应用时,如何高效地在组件之间传递数据和触发事件是非常重要的。Vue.js 提供了多种方式来处理组件间的通信,下面是最常用的 3 种方式:1.父子组件通信:通过 Props 和 Events在 V...

继Yuzu后,任天堂要求移除多个Switch模拟器项目

IT之家 7 月 11 日消息,任天堂美国分公司 (Nintendo of America) 已要求移除多个用于模拟 Nintendo Switch 游戏的开源模拟器项目,其中包括 Suyu、Nzu、Uzuy、Torzu、Sudachi 和 Yuzu-vanced 等。这些模拟器均被指控包含绕过任天...

10款超牛Vim插件,爱不释手了

我是一个忠实的Vim编辑器用户,从事开发工作多年,我一直都非常喜欢使用Vim。轻量、便捷,而且,熟悉了Vim相关的快捷键之后,效率能够成倍的提升。除了这些之外,Vim像很多知名的IDE、编辑器一样,也支持插件配置,通过这些插件,可以实现更多高级、高效的操作。今天,就来给大家分享10个我特别喜欢的Vi...

Solid State Logic 发布低保真数字失真插件 Digicrush

Solid State Logic 宣布推出低保真数字失真插件 Digicrush ,他们最新的创意工具具有经典数字失真的粗糙、低保真特性,完美模拟早期数字音频的衰减和伪影。Digicrush 充满怀旧气息,深受经典数字采样器和效果器的影响,具有内置抖动、可调比特深度和采样率降低功能,是为音轨添加复...

Vue进阶(幺叁捌):vue路由传参的几种基本方式

1、动态路由(页面刷新数据不丢失)methods:{ insurance(id) { //直接调用$router.push 实现携带参数的跳转 this.$router.push({ path: `/particulars/${id}`,...