react框架中无构建模式直接使用es6组件

react框架,看到的总是使用es5,通过webpack编译构建。react官方,直到现在的v18.1.0版本中,只有cjs和umd版本,都没有esm(es6)版本,看起来是对es6的不认可?

但是,大家写react组件都是按es6语法在写,最后搞了一大堆webpack/babel来转成es5运行,啰里啰嗦的。为何不直接使用es6原生模式直接运行呢?我比较喜欢“浏览器原生开发”,不想如俄罗套娃一样,一层层套下去,搞了很多半生不熟的工具(react-app在node_modules下搞出的921个组件,是很唬人的),最后出问题了还不知道哪里找。

相比较而言,vue 3.3.4版本就有cjs和esm版本,使用vue的框架就可以使用es6。

那是否react框架真的没有办法使用es6运行呢?那倒不是,只是麻烦些,方法如下。

(1)react和react-dom封装成es6

有些第三方组件,引用react是隐式从window.React来,有的是显示import。

import React from 'react';class YJFoilTopLeft extends React.Component {

不太可能去要求人家全部改掉。只能把react封装成一个esm版本的组件:

react@foil.mjs/*** react v18.1.0,官方没有提供es6版本,这里把es5版本包装成es6版本。*/
let React = window.yjRequire('react@raw');
let { Children, Component, Fragment, Profiler, PureComponent, StrictMode,Suspense, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, cloneElement,createContext, createElement, createFactory, createRef, forwardRef,isValidElement, lazy, memo, startTransition, unstable_act, useCallback,useContext, useDebugValue, useDeferredValue, useEffect, useId, useImperativeHandle,useInsertionEffect, useLayoutEffect, useMemo, useReducer, useRef, useState,useSyncExternalStore, useTransition, version } = React;
export {Children, Component, Fragment, Profiler, PureComponent, StrictMode,Suspense, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, cloneElement,createContext, createElement, createFactory, createRef, forwardRef,isValidElement, lazy, memo, startTransition, unstable_act, useCallback,useContext, useDebugValue, useDeferredValue, useEffect, useId, useImperativeHandle,useInsertionEffect, useLayoutEffect, useMemo, useReducer, useRef, useState,useSyncExternalStore, useTransition, version
}
export default React;

react-dom也类似:

react-dom@foil.mjs/*** react-dom v18.1.0,官方没有提供es6版本,这里把es5版本包装成es6版本。*/
let ReactDOM = window.yjRequire('react-dom@raw');
let { __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, createPortal, createRoot,findDOMNode, flushSync, hydrate, hydrateRoot, render, unmountComponentAtNode,unstable_batchedUpdates, unstable_renderSubtreeIntoContainer, version } = ReactDOM;
export {__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, createPortal, createRoot,findDOMNode, flushSync, hydrate, hydrateRoot, render, unmountComponentAtNode,unstable_batchedUpdates, unstable_renderSubtreeIntoContainer, version
}
export default ReactDOM;

浏览器中的importMap这样写:

{'react@raw':"/react/umd/react.development.js",'react-dom@raw':"/react-dom/umd/react-dom.development.js",'react':'/spa/react/root/src/wrapper/react@foil.mjs','react-dom':'/spa/react/root/src/wrapper/react-dom@foil.mjs'
}

(2)遇到其它没有esm版本的第三方组件,如法炮制。

如:devextreme-react用到的prop-types,也是没有esm版本:

prop-types@foil.mjs/*** prop-types v15.8.1,官方没有提供es6版本,这里把es5版本包装成es6版本。*/
let PropTypes = window.yjRequire('prop-types@raw');
let { array, bigint, bool, func, number, object, string, symbol,any, arrayOf, element, elementType, instanceOf, node, objectOf,oneOf, oneOfType, shape, exact, checkPropTypes, resetWarningCache} = PropTypes;
export {array, bigint, bool, func, number, object, string, symbol,any, arrayOf, element, elementType, instanceOf, node, objectOf,oneOf, oneOfType, shape, exact, checkPropTypes, resetWarningCache, PropTypes
}
export default PropTypes;

在浏览器importMap中加上映射:

{"prop-types@raw":"/devextreme-react/node_modules/prop-types/prop-types.js","prop-types":"/spa/react/root/src/wrapper/prop-types@foil.mjs",
}

rc-easyui 1.2.9版本也没有esm版本,你自己封装试试吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/742886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科研学习|论文解读——一种修正评分偏差并精细聚类中心的协同过滤推荐算法

知网链接 一种修正评分偏差并精细聚类中心的协同过滤推荐算法 - 中国知网 (cnki.net) 摘要 协同过滤作为国内外学者普遍关注的推荐算法之一,受评分失真和数据稀疏等问题影响,算法推荐效果不尽如人意。为解决上述问题,本文提出了一种改进的聚类…

centos 7.x 上安装 AI insightface + pytorch + cuda

centos 英伟达检查工具 lsb_release -a nvidia-smi lspci | grep -i nvidia CUDA v11.7 安装 首先在centos机器上必须先安装英伟达驱动,参考下面的文档 https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html# https://developer.nvidia.com/c…

Docker单机下的容器网络管理

Docker容器网络管理 容器网络类型 Docker安装以后,会在我们的主机上创建三个网络 docker network ls可以看到有bridge、host和none三种网络类型 我们先把ubuntu的网络环境配置一下 docker run -it ubuntu apt update apt install net-tools iputils-ping curl这…

HTML静态网页成品作业(HTML+CSS)——家乡广州介绍设计制作(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

Android Bundle putBinder传输超过1MB数据,Kotlin

Android Bundle putBinder传输超过1MB数据,Kotlin 由于Android系统架构的设计,Activity/Fragment之间通过Intent在Bundle塞进数据进行传输时候,如果数据超过1MB,会抛JE: java.lang.RuntimeException: android.os.Tran…

浏览器预览word

浏览器打开word是直接下载,而打开pdf才是预览。所以需要先将word转为pdf,visual basic将word转pdf的代码: Sub word2pdf()ActiveDocument.ExportAsFixedFormat OutputFileName:"C:\Users\zhour\Documents\contact.pdf", ExportFor…

proto的singular解释

在计算机科学和特别是在协议缓冲区(Protocol Buffers,简称Proto)的上下文中,“singular”这个词具有特定的含义。Protocol Buffers是Google开发的一种语言中立、平台中立、可扩展的序列化结构数据的方法,广泛用于通信协…

大型语言模型RAG(检索增强生成):检索技术的应用与挑战

摘要 检索增强生成(RAG)系统通过结合传统的语言模型生成能力和结构化数据检索,为复杂的问题提供精确的答案。本文深入探讨了RAG系统中检索技术的工作原理、实现方式以及面临的挑战,并对未来的发展方向提出了展望。 随着大型预训…

IDEA中配置完Maven后 重启就恢复默认设置

目录 问题描述解决方案-修改other settingsother settings改完也不奏效参考这里 问题描述 在IDEA的settings里配置完Maven之后 每次重启或新建一个项目/窗口之后 又恢复成之前的默认配置 解决方案-修改other settings 这和IDEA的版本有关 目前我使用的版本(2020.3.4) 配置完重…

自监督学习的新前沿:大型模型在自然语言处理中的应用

摘要: 自监督学习的新前沿,特别是大型模型在自然语言处理中的应用,正在引领自然语言处理领域的发展。本文将概述自监督学习的新前沿,特别是大型模型在自然语言处理中的应用,以及其在自然语言处理领域的重要性和应用前…

计算机网络期末98+冲刺笔记

一、计算机网络基础 1.1计算机网络的概述 计算机网络的定义:利用通信设备和线路,将地理位置不同的具有独立功能的多台计算机机器外部设备连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息…

cpp qt 一个奇怪的bug

今天在用cpp qt的时候发现了一个奇怪的东西 这是我的源代码 #include "mywidget.h" #include <QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent) {QPushButton * btn1 new QPushButton;btn1->show();btn1->setParent(this);btn1-&g…

如何恢复丢失未保存的 Word 文档指南

在广阔的数字领域&#xff0c;对丢失未保存的 Word 文档的恐惧对于用户来说是再熟悉不过的焦虑了。本指南旨在对用户可能发现自己迫切需要恢复未保存文档的各种场景进行详尽的探索。无论是由于保存失败、意外的系统崩溃还是令人心碎的意外删除&#xff0c;请放心&#xff0c;我…

无线业务配置建议

WPA2802.1X的接入方式 对于商用环境应该提供更安全的认证和加密方式&#xff0c; 推荐使用WPA2的AES加密方式&#xff0c;结合安全级别较高的802.1X认证方式&#xff0c;更适合封闭性较高的企业级用户。 # 配置WPA2的AES 802.1X认证方式。 <HUAWEI> system-view [HUAW…

Docker Commit提交

Docker Commit提交 Docker Commit镜像提交 以一个正在运行的tomcat为例因为docker拉取的镜像都是删减版&#xff0c;所以需要将webapp.dist的文件内容复制到webapps中再将自己制作的镜像放在正在运行服务器上&#xff0c;不是云端服务器上 #进入tomcat&#xff0c;这是一个正…

详解MySQL的MVCC(ReadView部分解析C++源码)

文章目录 1. 什么是MVCC2. MVCC核心组成&#xff08;三大件&#xff09;2.1 MVCC为什么需要三大件 3. 隐藏字段4. undo log4.1 模拟版本链数据形成过程 5. Read View5.1 m_ids5.2 m_creator_trx_id5.3 m_low_limit_id5.4 m_up_limit_id5.5 可见性分析算法 6. MVCC流程模拟6.1 R…

ChromeDriver 122 版本为例 国内下载地址及安装教程

ChromeDriver 国内下载地址 https://chromedriver.com/download 靠谱 千千万万别下载错了 先确认 Chrome 浏览器版本 以 win64 版本为例 那我们下载这一个啊&#xff0c;不要下载错了 下载地址贴在这哈 https://storage.googleapis.com/chrome-for-testing-public/122.0.…

GPT-3.5发布:大型语言模型的进化与挑战

摘要&#xff1a; GPT-3.5是OpenAI于2023年发布的一款大型语言模型&#xff0c;它是GPT-3的升级版&#xff0c;拥有1750亿个参数&#xff0c;比GPT-3的参数量增加了近一倍。GPT-3.5在文本生成、对话系统、文本理解等任务上表现出色&#xff0c;其性能已经接近甚至超过了人类水…

机器学习实验------Python机器学习软件包Scikit-Learn的学习与运用

第1关&#xff1a;使用scikit-learn导入数据集 本关任务 本关任务是使用scikit-learn的datasets模块导入iris数据集&#xff0c;并打印前5条原数据、前5条数据标签及原数据的数组大小。 即编程实现step1/importData.py 的getIrisData()函数&#xff1a; from sklearn import…

低代码开发平台,快速搭建开源MES系统

MS低代码云MES作为一家专注于提供生产制造数字化方案的服务商&#xff0c;“以客户为中心”、以“数据驱动、智能化、互联化”为企业的核心标签&#xff0c;以低代码平台为切入点&#xff0c;帮助企业构建以人为本的未来供应链生态系统&#xff0c;实现制造企业的智能化转型。 …