0

0

创建React Element的方法介绍(详细过程)

不言

不言

发布时间:2018-10-29 15:40:16

|

7427人浏览过

|

来源于segmentfault

转载

本篇文章给大家带来的内容是关于创建react element的方法介绍(详细过程),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

上一章节中,我们使用 create-react-app 工具搭建了一个基于 react 的开发环境,那么从这一章起,我们就正式开始 react 框架的学习。

打开 my-app 项目,找到 src/index.js 文件,我们在上一章中提到过,这个文件是整个应用的入口,当页面刷新时,会主动去加载这个文件,那这里我们直接删掉这个目录下的其他文件,只保存 index.js 即可。然后删除这个文件中的默认代码,并调用console.log("in")方法在控制台上进行输出。

使用 yarn start 命令启动项目,打开浏览器开发者工具,可以看到控制台成功打印。使用脚手架工具搭建的开发环境中,已经实现了热加载的功能,也就是说,当我们完成 js 代码的修改之后,不在需要频繁的通过刷新来查看页面的效果,在每次修改保存之后,浏览器会自动的完成页面的刷新。比如这里,我把这里输出的字符串稍稍改一下,然后保存,可以看到控制台已经将刚刚修改的字符串输出了。

React Element

好,回到 react 框架的知识点上,我们知道,一个页面是由很多的节点元素组合在一起的,比方说,h1 元素,p 元素,ul 元素等等。那实际上,在 react 中,最小的组成单元也是元素,只是我们将它称之为 react element。那么,我们如何创建一个 react element 呢?

比方说,这里我需要在页面中显示一个 h1 的元素,里面是一个 Hello World 字符串,那首先我就需要创建这样的一个 react element。

react 框架中,有两个核心对象 React 和 ReactDOM。这里就可以通过 React 对象来创建一个 h1 元素,首先引入这个对象。

import React from "react";

然后调用 createElement 方法来创建元素。这个方法的第一个参数是我们需要创建的节点类型,这里我需要创建一个 h1 元素,那参数就是 h1,第二个参数是这个元素拥有的属性设置,没有属性的时候可以直接给 null 的值,第三个参数就是该元素的子元素,这里我们需要在 h1 元素下显示 Hello World,那我们就可以把这个字符串当成它的子元素传递进去。这个方法的返回值就是一个 react element。我们可以在控制台上打印这个对象。

const h1Ele = React.createElement("h1", null, "Hello World");
console.log(h1Ele)

从控制台上我们可以看到,它就是一个普通的 javascript 对象,这个对象拥有一些属性,用来描述真实的元素。比方说: 这里的 type 属性就是用来描述这个元素的类型,也就是说这个对象映射的是一个 h1 元素,同理,这里的 props.children 指的就是这个元素下面的子元素,也就是的 Hello World 字符串。

1474145045-5bd42d1cba755_articlex.png

现在,我们完成了 react element 的创建,下一步就需要将这个元素变成真正的 DOM 节点添加到我们的页面中去。这时,就需要使用 ReactDOM 对象来完成真实节点的渲染。首先引入这个对象。

import ReactDOM from "react-dom"

在 ReactDOM 对象上,有一个 render 方法,就是专门用来将 react element 渲染成真实 DOM 的。这个方法接收 2 个参数。第一个参数是我们需要渲染的 react element,这里我们就直接使用刚刚创建的那个 h1 元素;第二个参数是需要将这些元素显示到页面的哪个地方。打开 index.html 页面,我们可以发现,在这个页面中有一个空白的 p 元素,这个元素我们称之为叫容器,专门用来存放由 react 产生的这些元素的。那么这里,我们就可以把这个元素当成 render 方法的第二个参数。保存之后,查看页面,我们就可以看到在页面上显示了一个 Hello World。

Sencha touch 开发指南 中文WORD版
Sencha touch 开发指南 中文WORD版

本文档主要讲述的是Sencha touch 开发指南;主要介绍如何使用Sencha Touch为手持设备进行应用开发,主要是针对iPhone这样的高端手机,我们会通过一个详细的例子来介绍整个开发的流程。 Sencha Touch是专门为移动设备开发应用的Javascrt框架。通过Sencha Touch你可以创建非常像native app的web app,用户界面组件和数据管理全部基于HTML5和CSS3的web标准,全面兼容Android和Apple iOS。希望本文档会给有需要的朋友带来帮助;感兴趣的

下载
ReactDOM.render(h1Ele, document.querySelector("#root"))

下一步,我们如何给这个节点增加样式呢?回到刚刚创建节点的那个方法,实际上,我们可以在这个方法的第二个参数中,来设置这个节点的样式,比方说,我现在需要让这个 h1 的字体颜色变成红色,那么直接指定 style color: red 就可以了。

const h1Ele = React.createElement("h1", {
  style: {
    color: "red"
  }
}, "Hello World");

除了使用 style 属性以外,我们依然可以通过引入外部样式表来修饰。这里我新建一个 css 文件,添加一个 class 选择器,设置字体大小为 50px,然后在 index.js 中,我们使用 import 引入这个 css 文件:

// theme.css
.msg {
  font-size: 50px;
}

// index.js
import "./theme.css"

然后在创建这个元素的时候,指定这个元素的 className 为 msg 就可以了,这时我们可以看到这个样式表就应用到当前这个元素了。

const h1Ele = React.createElement("h1", {
  style: {
    color: "red"
  },
  className: "msg"
}, "Hello World");

多个子元素的传递方式

接下来,我想再渲染一个列表应该如何操作呢?比方说,在这个列表中要显示 3 个选项,分别是 HTML,CSS 和 JAVASCRIPT。那我们第一步应该要创建这些节点。

首先引入 React 对象,使用 createElement 方法创建第一个 li 元素,第一个显示 HTML,然后再创建两个相同的元素,分别显示 CSS 和 JAVASCRIPT。

const li_01 = React.createElement("li", null, "HTML")
const li_02 = React.createElement("li", null, "CSS")
const li_03 = React.createElement("li", null, "JAVASCRIPT")

子元素创建完成之后,我们再来创建一个 ul 元素,因为这个ul元素有多个子元素,因此,这里有两种方式可以来传递子元素,第一种,我们可以把每一个子元素都当成参数传递给 createElement 方法

const ulEle = React.createElement("ul", null, li_01, li_02, li_03)

完成之后,将 ulEle 元素通过 render 方法渲染出来。查看页面,可以看到列表已经成功显示。

第二种方法,我们还可以将这些子元素变成一个数组交给 createElement 方法完成渲染,查看页面,我们可以看到列表依然正常显示,但是控制台给咱们抛出了一个警告:

3537163397-5bd42f0626bdd_articlex.png

这个警告的原因是,如果我们通过数组迭代的方式来创建子元素的话,我们需要给每一个子元素添加一个key的属性,而且这个属性的值,在同级元素中必须是唯一且不变的。那这里,我们给每一个li元素都增加一个key,值得话,让他们保证唯一就可以了。再查看页面,这时警告就消失了。

const li_01 = React.createElement("li", { key: 0 }, "HTML")
const li_02 = React.createElement("li", { key: 1 }, "CSS")
const li_03 = React.createElement("li", { key: 2 }, "JAVASCRIPT")

当然,这里我们还可以定义一个数组,然后通过迭代数组来产生这些li元素,这样可以简化一下我们的代码:

const arr = ["HTML", "CSS", "JAVASCRIPT"]
const liEles = arr.map((item, index) => {
  return React.createElement("li", {
    key: index
  }, item)
})
const ulEle = React.createElement("ul", null, liEles)

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

248

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

947

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

658

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1560

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

645

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1088

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1062

2024.04.29

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

24

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.2万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号