Skip to content

2 First Time try React

2.1 Importing React

<script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>

React 可以构建在浏览器中运行的 web 应用,也可以构建在移动端运行的原生应用,React 在构建这两种应用时会有一些通用方法和一些非通用方法,通用方法都被放置在了 react 文件中,非通用方法比如实现web 应用的方法被放置在了 react-dom 中,实现移动端应用的方法被放置在了 react-native-web 文件中。

react:核心库,包含了构建 web 应用和构建移动端 APP应用的通用方法。

react-dom:只包含了构建 web 应用的方法。

react-native-web:只包含构建移动端 APP应用的方法。

VS 中输入!会生成基本的html骨架

Screenshot 2025-01-24 at 18.08.16

2.2 Creating Virtual DOM

引入 react 后,window 对象下会多出一个 React 的对象,对象下面的 createElement 方法用于创建元素。

// type:标签名称,字符串
// props:元素属性,对象,无属性填入 null
// children:子元素,普通文本或 createElement 方法返回的元素对象
// 返回值:元素对象(虚拟 DOM 对象)
React.createElement(type, props, children) // 虚拟对象 js 对象
const button = React.createElement("button", { type"button" }"保存")

Screenshot 2025-01-24 at 18.32.37

Screenshot 2025-01-24 at 18.32.57

Screenshot 2025-01-24 at 18.32.12

2.3 Rendering Virtual DOM

引入 react-dom 后,window 下会多出一个叫做 ReactDOM 的对象,对象下面的 render 方法用于渲染元素。

// element:待渲染元素对象,就是通过 createElement 方法创建的虚拟 DOM 对象
// container:虚拟 DOM 对象的渲染位置.真实 DOM 对象。
ReactDOM.render(element, container)
<div id="root"></div>
ReactDOM.render(button, document.getElementById("root"))
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="root"> </div>
    <script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
    <script>
        const div = React.createElement("div", { id: "box" }, "I am a div");
        console.log(div);

        ReactDOM.render(div, document.getElementById("root"));
        // " " vs ''  =>  " " is used for string and ' ' is used for char
    </script>
</body>
</html>

Screenshot 2025-01-24 at 22.49.50

Screenshot 2025-01-24 at 22.49.56

需求: 将指定的HTML结构使用React提供的方式渲染出来

<main id="main">
  <h1>My Blog</h1>
  <article>
    <h2>My First Article</h2>
    <p class="text">This is the content of the article</p>
  </article>
</main>

创建一段html结构所对应的虚拟dom, 然后通过react提供的render方法把它渲染出来.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="root"> </div>
    <script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
    <script>
        const p = React.createElement("p", { className: "text" }, "This is the content of the article");
        const articleHeader = React.createElement("h2", null, "My First Article");
        const article = React.createElement("article", null, articleHeader, p);
        const mainHeader = React.createElement("h1", null, "My Blog");
        const main = React.createElement("main", { id: "main" }, mainHeader, article);
        ReactDOM.render(main, document.getElementById("root"));
    </script>
</body>
</html>

注意class是关键字, 需要使用className.

在 JavaScript 中,class 是一个保留关键字,因为它用于定义类(class 声明)。然而,HTML 中使用 class 属性来定义元素的 CSS 类。因此,React 不允许直接在 JSX 中使用 class,以避免和 JavaScript 的 class 关键字冲突。

React 的解决方案是使用 className 替代 HTML 的 class 属性。当在 React 中定义元素的 CSS 类时,你需要用 className,否则会导致错误或意外行为。

Screenshot 2025-01-24 at 23.11.11

Screenshot 2025-01-24 at 23.12.12