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

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

ruisui883个月前 (02-03)技术分析15

在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)” 的相关文章

Vue3,父组件子组件传值,provide(提供)和inject(注入)传值

父组件向子组件传值父子组件传递数据时,通常使用的是props和emit,父向子传递使用props,子向父传递使用emit。子组件接收3种方式// 1、简单接收 props:["title","isShow"], // 2、接收的同时对数据类型进行限制 props:{...

Acustica Audio 发布模拟Roland Jupiter 双声道合成器插件 TH2

福利: Acustica Audio 发布模拟Roland Jupiter 风格的双声道合成器插件 TH2 免费下载 意大利 Acustica Audio 公司发布布模拟Roland Jupiter 风格的双声道合成器插件 TH2 ,灵感来源于Acustica Audio的THING-8系列,它是...

js中数组filter方法的使用和实现

定义filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。语法var newArray = arr.filter(callback(element[, index[, selfArr]])[, thisArg])参数callback循环数组每个元素时调用的回调函数。回调函...

Vue实战篇|使用路由管理用户权限(动态路由)

权限控制是后台管理系统比较常见的需求,如果我们需要对某些页面的添加权限控制的话,那我们可以在路由管理中的权限做一些校验,没有通过权限校验的给出相应的提示或者直接跳转到报错页面。跟着我一起来学vue实战篇路由管理权限吧!权限校验函数getCurrentAuthority()函数用于获取当前用户权限,一...

VUE 技术栈

官网链接:https://cn.vuejs.org/什么是vue:渐进式JavaScript 框架vue-cli链接:https://cli.vuejs.org/vue-cli安装:npm install -g @vue/clivue -V创建一个项目:vue create xxxxxx模版语法:文...

一文看懂企业微信开发简易教程

为让开发者快速理解开发流程,本篇章展示如何一步步设计一个能与企业后台互动的自建应用。添加自建应用登录企业微信管理端 -> 应用与小程序 -> 应用 -> 自建,点击“创建应用”,设置应用logo、应用名称等信息,创建应用。创建完成后,在管理端的应用列表里进入该应用,可以看到agen...