通过 React 来构建界面

news/2024/7/15 19:33:22 标签: react.js, javascript, ecmascript

1- 通过 React 来构建界面

第1步:下载所需要的二个库文件至本地,如果需要加载指定版本的 reactreact-dom,可以把 18 替换成所需加载的版本号。

  • react.js:React中的核心库文件。

    // 开发版
    https://unpkg.com/react@18/umd/react.development.js
    // 生产版
    https://unpkg.com/react@18/umd/react.production.min.js
    
  • react-dom.js:提供了能在HTML中操作真实DOM的API

    // 开发版
    https://unpkg.com/react-dom@18/umd/react-dom.development.js
    // 生产版
    https://unpkg.com/react-dom@18/umd/react-dom.production.min.js
    

注意:以上两个文件可以通过浏览器打开,另存为并保存至目录lib中即可,lit目录文件如下。

|-lib
|    |-react.development.js 
|    |-react.production.min.js	
|    |-react-dom.development.js 
|    |-react-dom.production.min.js 

第2步:新建一个HTML页面,在页面中引入react相关文件,并在body中创建一个用于显示React内容的空标签div

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 加载 React。-->
    <!-- 注意1: 打包部署时,需将 "development.js" 替换为 "production.min.js"。-->
    <!-- 注意2: react-dom.js依赖于react.js,所以要先引入react.js,后引入react-dom.js"。-->
	<!-- 引入react的核心库 -->
    <script src="./lib/react.development.js"></script>
    <!-- 提供了能在HTML中操作真实DOM的`API` -->
    <script src="./lib/react-dom.development.js"></script>
</head>
<body>
    <!-- 这个 <div> 加上唯一的 id HTML 属性,该 div 即是展示 React 内容的容器! -->
    <div id="root"></div>
</body>
</html>

第3步:在 </body> 结束标签之前通过 React 实现 Hello World

    <script>javascript">
        // ReactDOM 来自react-dom.development.js。
        // 通过createRoot函数,将 id 为 root 的 div 作为呈现 React 内容的容器。
        const root = ReactDOM.createRoot(document.getElementById('root'));
        // 在容器中呈现 Hello, world!
        root.render("Hello, world!");
    </script>	
</body>

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./lib/react.development.js"></script>
    <script src="./lib/react-dom.development.js"></script>
</head>
<body>
    <div id="root"></div>
    <script>javascript">
        const root = ReactDOM.createRoot(document.getElementById('root'));
        root.render("Hello, world!");
    </script>
</body>
</html>

2- render 注意事项

  • 允许在同一个界面中指定多个挂载容器

    <body>
        <div id="root"></div>
        <div class="my"></div>   
        <script>
            {
                // 将 id 为 root 的元素作为 React 容器
                const root = ReactDOM.createRoot(document.querySelector("#root"));
                // 将 class 为 my 的元素作为 React 容器
                const my = ReactDOM.createRoot(document.querySelector(".my"));
                // 在 root 容器中渲染字符串 root
                root.render("root");
                // 在 my 容器中渲染字符串 my
                my.render("my");
            }
        </script>
    </body>
    
  • 同一个挂载位置,可以执行多次 render ,后者会覆盖掉前者的内容

    <body>
        <!--  展示 React 内容的容器  -->
        <div id="root"></div>
        <script>
            {
                const root = ReactDOM.createRoot(document.querySelector("#root"));
                // 渲染字符串 one
                root.render("one");
                // 渲染字符串 two 
                root.render("two");
            }
        </script>
    </body>
    
  • 同一个挂载位置,不允许多次被指定为 React 容器

    <body>
        <!--  展示 React 内容的容器  -->
        <div id="root"></div>
        <script>
            {
                // 将 id 为 root 的元素作为 React 容器,赋值给常量 root
                const root = ReactDOM.createRoot(document.querySelector("#root"));
                // 再次将 id 为 root 的元素作为 React 容器,赋值给常量 root2
                const root2 = ReactDOM.createRoot(document.querySelector("#root"));
                root.render("one");
                root2.render("two");
            }
        </script>
    </body>
    

    注意:以上代码会以下警告:

    Warning: You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it.
    
  • 不要将 html 元素作为 React 容器

    <body>
        <!--  展示 React 内容的容器  -->
        <div id="root"></div>
        <script>javascript">
            {
                const root = ReactDOM.createRoot(document.documentElement);
                root.render("html")
            }
        </script>
    </body>		
    

    注意:以上代码会以下警告:

    Warning: validateDOMNesting(...): Text nodes cannot appear as a child of <html>.
    
  • 不要将 body 元素作为 React 容器

    <body>
        <!--  展示 React 内容的容器  -->
        <div id="root"></div>
        <script>javascript">
            {
                const root = ReactDOM.createRoot(document.body);
                root.render("body")
            }
        </script>
    </body>
    

    注意:以上代码会以下警告:

    Warning: createRoot(): Creating roots directly with document.body is discouraged, since its children are often manipulated by third-party scripts and browser extensions. This may lead to subtle reconciliation issues. Try using a container element created for your app.
    
  • 可以使用链式调用

    <body>
        <!--  展示 React 内容的容器  -->
        <div id="root"></div>
        <script>javascript">
            {
                ReactDOM.createRoot(document.querySelector("#root")).render("字符串")
            }
        </script>
    </body>
    

3- 卸载 React 容器

<body>
    <button>卸载</button>
    <div id="root"></div>
    <script>javascript">
        const root = ReactDOM.createRoot(document.querySelector("#root"));
        const btn = document.querySelector("button");
        root.render(1024);
        btn.onclick = function(){
            root.unmount();
        }
    </script>
</body>

http://www.niftyadmin.cn/n/5358927.html

相关文章

Docker基础(持续更新中)

# 第1步&#xff0c;去DockerHub查看nginx镜像仓库及相关信息# 第2步&#xff0c;拉取Nginx镜像 docker pull nginx# 第3步&#xff0c;查看镜像 docker images # 结果如下&#xff1a; REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 60…

【Java 数据结构】栈和队列

栈和队列 1. 栈(Stack)1.1 概念1.2 栈的使用1.3 栈的模拟实现1.4 栈的应用场景1.5 概念区分 2. 队列(Queue)2.1 概念2.2 队列的使用2.3 队列模拟实现2.4 循环队列 3. 双端队列 (Deque)4. 面试题 1. 栈(Stack) 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在…

Springboot 校验工具类

校验工具类 这个实现逻辑很简单,就是调用string的正则表达式 我这里的代码要导入糊涂工具包 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.17</version> </dependency>import…

幻兽帕鲁服务器Palworld游戏怎么更新?

自建幻兽帕鲁服务器进入Palworld游戏提示“您正尝试加入的比赛正在运行不兼容的游戏版本&#xff0c;请尝试升级游戏版本”什么原因&#xff1f;这是由于你的客户端和幻兽帕鲁服务器版本不匹配&#xff0c;如何解决&#xff1f;更新幻兽帕鲁服务器即可解决。阿里云百科aliyunba…

UnityUPR_UOS

UnityUPR_UOS 不明所以&#xff0c;先网罗一众链接突击一波吧&#xff01; UPR - Unity专业性能优化工具https://upr.unity.cn/Swagger UI (unity.cn)https://upr.unity.cn/api/swagger/index.htmlUOS Developer Portal (unity.cn)https://uos.unity.cn/appsxasset:专业 Unit…

android 自定义下拉框

一、 简介&#xff1a; 原生Android 提供的spinner下拉框不怎么方便&#xff0c;样式有点丑。修改起来麻烦&#xff0c;于是就自己动手写了一下拉列表。 实现原理使用的是&#xff0c;popwindow弹框&#xff0c;可实现宽高自定义&#xff0c;下拉列表使用listview. 二、pop弹框…

020 switch多选择结构

什么是switch多选择结构 switch语句中的变量类型为char的示例 char grade A; switch (grade){case A:System.out.println("成绩为A");break;case B:System.out.println("成绩为B");break;case C:System.out.println("成绩为C");break;case D:S…

go语言WebSocket编程

1. webSocket介绍 WebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直接可以创…