在svelet5中导入并使用react组件库
- svelte5中使用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";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组件中渲染
参考:
props-and-restProps
issues
- 添加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>