在svelet5中导入并使用react组件库
svelte5中使用react组件
在svelet5中导入并使用react组件库, 示例项目地址:https://github.com/shenshouer/my-svelte-react
在svelte5中当前还有问题,无法将children传递到react中渲染
-
使用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
-
安装react相关依赖
$ pnpm i react react-dom
$ pnpm i --save-dev @types/react @types/react-dom
$ pnpm add @vitejs/plugin-react -D -
修改
vite.config.ts
增加react支持import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react'; # <---- hereexport default defineConfig({
plugins: [sveltekit(), react()] # <---- here
}); -
创建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";
</script>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 }); } });
目前此部分适配器有问题, children无法获取并且在react组件中渲染
-
添加react组件库, 如 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>