React 相关方法(API)介绍-元素与组件操作

2023-11-18



JSX可以减少定义组件的复杂性,但对于React来说JSX并不是必须的,JSX标签最终会被转换为原生的JavaScript。除使用JSX语法外,还可以使用React提供的API来创建组件。本文将介绍使用React创建元素,及一些React中重要的API。


  1. React引用
  2. 元素操作API
  3. 组件操作API


1. React引用

React是React库的入口,React中所有的方法都是通过该对象调用,React支持AMDCommonJSCMD)两种规范引用。

AMD规范的预编译包,React是全局的,可以像下现这样引用:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <!--引用React-->
    <script src="build/react.js"></script>
  </head>
  <body>
    <div id="example"></div>
    <script type="text/babel">
     // 使用用React
     React.render(……);
    </script>
  </body>
</html>

CommonJS模块系统(如:Node.js)中,使用require来引用React:

// 引用React
var React = require('react');

// 使用React
React.render(……);


2. 元素操作API

使用非JSX语法创建组件,首先要创建React元素(ReactElement)。React提供了创建元素、复制元素等方法。

2.1 创建元素:React.createElement()

ReactElement createElement(
  string/ReactClass type,
  [object props],
  [children ...]
)

该方法创建并返回一个ReactElement对象,其参数如下:

  • type,可以是一个HTML标签或是一个React组件ReactClass
  • props,可选参数,表示对象的属性
  • children,第三个参数及其后的参数都会被认为是元素的子元素
  • 返回值:ReactElement对象

示例,创建一个如下结构的组件:

<div className="myClass">
  <h2>itbilu.com</h2><hr/>
</div>

使用createElement()方法操作如下:

ReactDOM.render(
  React.createElement('div', {className:'myClass'},  
    React.createElement('h2', null, 'itbilu.com'),
    React.createElement('hr')
  ),
  document.getElementById('example')
);

// itbilu.com

完整代码:createElement.html


2.2 元素克隆:React.cloneElement()

ReactElement cloneElement(
  ReactElement element,
  [object props],
  [children ...]
)

该方法会从已有的ReactElement中复制,并返回一个新的ReactElement对象,其参数如下:

  • element,一个React元素ReactElement
  • props,可选参数,表示对象的属性
  • children,第三个参数及其后的参数都会被认为是元素的子元素
  • 返回值:ReactElement对象

示例,已有如下元素:

React.createElement('div');

使用cloneElement()复制这个元素,并最终生前面示例中的HTML。复制方法如下,详见cloneElement.html

var div = React.createElement('div');

ReactDOM.render(
  React.cloneElement(div, {className:'myClass'},  
    React.createElement('h2', null, 'itbilu.com'),
    React.createElement('hr')
  ),
  document.getElementById('example')
);


2.3 React.DOM命名空间

React.DOM命名空间中是创建各种HTML元素的工厂方法,所有的方法都是对React.createElement()方法的封装,通过这个命名空间也以快捷的创建各个HTML元素。

ReactElement DOM.HTML_TAG(
  [object props],
  [children ...]
)

创建一个名HTML_TAGReactElement,其参数如下:

  • props,可选参数,表示对象的属性
  • children,第三个参数及其后的参数都会被认为是元素的子元素
  • 返回值:ReactElement对象

React.DOM.*只是createElement()方法的快捷方式,它帮我们自动添加了createElement()方法的第一个参数type。以下两种方式执行结果相同:

React.createElement('div');
React.DOM.div();


2.4 有效元素判断:isValidElement()

React提供了isValidElement()方法,用于判断传入对象是否是有效的ReactElement

boolean isValidElement(* object)

示例如下:

var div = React.createElement('div');
React.isValidElement(div);  // true
React.isValidElement(document.getElementById('example')); // fase


3. 组件操作API

组件Component)是对一个或一系列ReactElement的封装,在React中组件被认为是最小的功能分离点。合理的利用组件,可以解耦业务复杂度,更可以高效的完成UI的编写。


3.1 创建组件类:createClass()

ReactClass createClass(object specification)

创建并返回一个组件类(ReactClass)。组件内部必须实现render()方法,并且返回一个单个子级,而其内部可能会有很深的子级结构。

示例,将前面示例中的HTML结构定义成一个组件(createClass.html):

var App = React.createClass({displayName: 'App',
  render: function () {
    return (React.createElement('div', {className:'myClass'},  
      React.createElement('h2', null, this.props.children),
      React.createElement('hr')
    ));
  }
});


创建组件类后,要将其渲染到页面除可以使用JSX语法引用组件外,还可以使用以下两种方法:

  1. 使用createElement()方法创建ReactElement
  2. 使用createFactory()方法创建一个工厂函数,该函数会返回一个ReactElement


3.2 创建元素工厂函数:createFactory()

factoryFunction createFactory(
  string/ReactClass type
)

创建一个返回ReactElements的工厂函数:

  • type,HTML标签(如:div、body等)或ReactClass

如,对前面的组件类创建一个工厂函数(createFactory.html):

var AppClass = React.createClass({displayName: 'App',
  render: function () {
    return (React.createElement('div', {className:'myClass'},  
      React.createElement('h2', null, this.props.children),
      React.createElement('hr')
    ));
  }
});
var App = React.createFactory(AppClass);

创建后就不再需要使用JSXcerateElement()方法:

ReactDOM.render(
  App(null, 'itbilu.com'),
  document.getElementById('example')
);

JSX可以减少定义组件的复杂性,但对于React来说JSX并不是必须的,JSX标签最终会被转换为原生的JavaScript。除使用JSX语法外,还可以使用React提供的API来创建组件。本文将介绍使用React创建元素,及一些React中重要的API。


  1. React引用
  2. 元素操作API
  3. 组件操作API


1. React引用

React是React库的入口,React中所有的方法都是通过该对象调用,React支持AMDCommonJSCMD)两种规范引用。

AMD规范的预编译包,React是全局的,可以像下现这样引用:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <!--引用React-->
    <script src="build/react.js"></script>
  </head>
  <body>
    <div id="example"></div>
    <script type="text/babel">
     // 使用用React
     React.render(……);
    </script>
  </body>
</html>

CommonJS模块系统(如:Node.js)中,使用require来引用React:

// 引用React
var React = require('react');

// 使用React
React.render(……);


2. 元素操作API

使用非JSX语法创建组件,首先要创建React元素(ReactElement)。React提供了创建元素、复制元素等方法。

2.1 创建元素:React.createElement()

ReactElement createElement(
  string/ReactClass type,
  [object props],
  [children ...]
)

该方法创建并返回一个ReactElement对象,其参数如下:

  • type,可以是一个HTML标签或是一个React组件ReactClass
  • props,可选参数,表示对象的属性
  • children,第三个参数及其后的参数都会被认为是元素的子元素
  • 返回值:ReactElement对象

示例,创建一个如下结构的组件:

<div className="myClass">
  <h2>itbilu.com</h2><hr/>
</div>

使用createElement()方法操作如下:

ReactDOM.render(
  React.createElement('div', {className:'myClass'},  
    React.createElement('h2', null, 'itbilu.com'),
    React.createElement('hr')
  ),
  document.getElementById('example')
);

// itbilu.com

完整代码:createElement.html


2.2 元素克隆:React.cloneElement()

ReactElement cloneElement(
  ReactElement element,
  [object props],
  [children ...]
)

该方法会从已有的ReactElement中复制,并返回一个新的ReactElement对象,其参数如下:

  • element,一个React元素ReactElement
  • props,可选参数,表示对象的属性
  • children,第三个参数及其后的参数都会被认为是元素的子元素
  • 返回值:ReactElement对象

示例,已有如下元素:

React.createElement('div');

使用cloneElement()复制这个元素,并最终生前面示例中的HTML。复制方法如下,详见cloneElement.html

var div = React.createElement('div');

ReactDOM.render(
  React.cloneElement(div, {className:'myClass'},  
    React.createElement('h2', null, 'itbilu.com'),
    React.createElement('hr')
  ),
  document.getElementById('example')
);


2.3 React.DOM命名空间

React.DOM命名空间中是创建各种HTML元素的工厂方法,所有的方法都是对React.createElement()方法的封装,通过这个命名空间也以快捷的创建各个HTML元素。

ReactElement DOM.HTML_TAG(
  [object props],
  [children ...]
)

创建一个名HTML_TAGReactElement,其参数如下:

  • props,可选参数,表示对象的属性
  • children,第三个参数及其后的参数都会被认为是元素的子元素
  • 返回值:ReactElement对象

React.DOM.*只是createElement()方法的快捷方式,它帮我们自动添加了createElement()方法的第一个参数type。以下两种方式执行结果相同:

React.createElement('div');
React.DOM.div();


2.4 有效元素判断:isValidElement()

React提供了isValidElement()方法,用于判断传入对象是否是有效的ReactElement

boolean isValidElement(* object)

示例如下:

var div = React.createElement('div');
React.isValidElement(div);  // true
React.isValidElement(document.getElementById('example')); // fase


3. 组件操作API

组件Component)是对一个或一系列ReactElement的封装,在React中组件被认为是最小的功能分离点。合理的利用组件,可以解耦业务复杂度,更可以高效的完成UI的编写。


3.1 创建组件类:createClass()

ReactClass createClass(object specification)

创建并返回一个组件类(ReactClass)。组件内部必须实现render()方法,并且返回一个单个子级,而其内部可能会有很深的子级结构。

示例,将前面示例中的HTML结构定义成一个组件(createClass.html):

var App = React.createClass({displayName: 'App',
  render: function () {
    return (React.createElement('div', {className:'myClass'},  
      React.createElement('h2', null, this.props.children),
      React.createElement('hr')
    ));
  }
});


创建组件类后,要将其渲染到页面除可以使用JSX语法引用组件外,还可以使用以下两种方法:

  1. 使用createElement()方法创建ReactElement
  2. 使用createFactory()方法创建一个工厂函数,该函数会返回一个ReactElement


3.2 创建元素工厂函数:createFactory()

factoryFunction createFactory(
  string/ReactClass type
)

创建一个返回ReactElements的工厂函数:

  • type,HTML标签(如:div、body等)或ReactClass

如,对前面的组件类创建一个工厂函数(createFactory.html):

var AppClass = React.createClass({displayName: 'App',
  render: function () {
    return (React.createElement('div', {className:'myClass'},  
      React.createElement('h2', null, this.props.children),
      React.createElement('hr')
    ));
  }
});
var App = React.createFactory(AppClass);

创建后就不再需要使用JSXcerateElement()方法:

ReactDOM.render(
  App(null, 'itbilu.com'),
  document.getElementById('example')
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React 相关方法(API)介绍-元素与组件操作 的相关文章

  • React中的“计算属性”

    React中的 计算属性 相信许多学习过vue的小伙伴对计算属性都不陌生吧 计算属性能帮我们数据进行一些计算操作 计算属性是依赖于data里面的数据的 在vue中只要计算属性依赖的data值发生改变 则计算属性就会调用 那React中也有计
  • React重点知识拓展,含Hooks、路由懒加载等

    第7章 React扩展 一 setState 1 setState更新状态的2种写法 setState stateChange callback 对象式的setState stateChange为状态改变的对象 该对象可以体现出状态的更改
  • React仿写网易云音乐项目

    文章目录 一 项目功能说明 二 最终效果 三 文件目录结构说明 四 项目技术栈 五 核心技术 1 配置项目别名 craco craco 2 使用reset css进行 css 重置 3 使用CSS Sprites 精灵图 4 使用 memo
  • react项目中使用react-dnd实现列表的拖拽排序

    现在有一个新需求就是需要对一个列表 实现拖拽排序的功能 要实现的效果如下图 可以通过 react dnd 或者 react beautiful dnd 两种方式实现 今天先讲下使用react dnd是如何实现的 github地址 https
  • 【前端】react-markdown配置解析

    文章目录 react markdown基本配置 同步预览配置 MdEditorComponent js reducer js initBlogState js action types js sync actions js store js
  • React学习之扩展浅比较(三十四)

    注意 这玩意也已经被React PureComponent的功能取代了 这里依旧是提一下 主要是React v15的版本中的react with addons js 这些玩意还存在 哎 害人呐 引入 import shallowCompar
  • ant design pro v5 配置拦截器,header

    ant design pro v5 配置拦截器 header 1 资料文档 https umijs org zh CN plugins plugin request requestinterceptors 2 编写app tsx 我这里是自
  • 在校学生如何白嫖黑群辉虚拟机和内网穿透,实现海量资源的公网访问?(小白专用)

    文章目录 前言 本教程解决的问题是 按照本教程方法操作后 达到的效果是 前排提醒 1 搭建群辉虚拟机 1 1 下载黑群辉文件 vmvare虚拟机安装包 1 2 安装VMware虚拟机 1 3 解压黑 群辉虚拟机文件 1 4 虚拟机初始化 1
  • 对 React Hook的闭包陷阱的理解,有哪些解决方案?

    hooks中 奇怪 其实符合逻辑 的 闭包陷阱 的场景 同时 在许多 react hooks 的文章里 也能看到 useRef 的身影 那么为什么使用 useRef 又能摆脱 这个 闭包陷阱 搞清楚这些问题 将能较大的提升对 react h
  • 如何在 Ubuntu 20.04 上使用 React 前端设置 Ruby on Rails v7 项目

    作者选择了电子前沿基金会接受捐赠作为为捐款而写程序 介绍 红宝石 on Rails是一个流行的服务器端 Web 应用程序框架 它为当今网络上存在的许多流行应用程序提供支持 例如GitHub Basecamp 声云 Airbnb and Tw
  • chrome浏览器安装redux-devtools调试工具

    chrome浏览器安装redux devtools调试工具 1 点击进入https www chromefor com 2 在搜索框搜索redux 3 找到最新版本 Redux DevTools v2 17 0 进行下载 4 选择下载线路
  • Ant Design Pro 从零到一教程

    说在最前面的话 可是能全网唯一适合小白的antd教程 因为我找了接近一个周的教程 无论是视频 博客等等都没有比较完整的教程 所以才说这可能是唯一全网适合小白教程 文章末有相关学习链接 适用人群 喜欢看文字或者代码学习的人 学习的人掌握基本的
  • Vite搭建react+ts项目

    创建一个react项目 首先需要打开终端 进行vite的引入 yarn create vite 使用react模板创建项目 yarn create vite react test template react cd react test y
  • React路由懒加载的实现

    React lazy 通过引入lazy Suspense两个方法实现路由懒加载 首先 我们需要在组件中引入lazy Suspense这两个方法 然后我们需要通过Suspense组件 包裹着注册路由 import React Componen
  • React中使用if else 条件判断

    在react中用jsx渲染dom的时候经常会遇到if条件判断 然而在jsx中竟是不允许if条件判断的 以下有几种判断方式 可以根据自己的应用场景 挑选适合的 方案一 class HelloMessage extends React Comp
  • React(一):React的设计哲学 - 简单之美

    React 一 React的设计哲学 简单之美 React 二 React开发神器Webpack React 三 理解JSX和组件 React 四 虚拟DOM Diff算法解析 React 五 使用Flux搭建React应用程序架构 Rea
  • React核心概念:状态提升

    上一节 表单 下一节 组合vs继承 React核心概念 状态提升 引言 添加第二个输入框 编写转换函数 状态提升 经验总结 引言 很多情况下我们使用的多个组件需要对同一个数据做出对应的反应 在这里我们推荐把这个共享的状态提升到距离这些组件最
  • umi 后台管理demo

    umi 后台管理demo umi react ts dva antd egg 有待优化 简单的前后端管理demo 接口提供增删查改 前端也有相应功能 github代码 https github com huiBuiling ql admin
  • 如何替换对象的key值

    发生的场景 现在用antd组件库 有些组件想渲染数据的话 我要根据他们官网给的字段名称对应起来才能渲染上去 这个是复选框选中 保存的时候 字段需要按照后台约定的传入code value 1 常规循环遍历 大招来了 哈哈哈 才疏学浅 我觉得是
  • 黑马React:基础拓展

    黑马React D10 基础拓展 Date December 18 2023 useReducer 基础使用 作用 让 React 管理多个 相对关联 的状态数据 补充 和useState的作用类似 用来管理相对复杂的状态数据 特点 use

随机推荐

  • C++57个入门知识点_40 常成员函数(用于定义不可修改类内部成员变量的函数,一般用来修饰Get函数;常成员函数this指针:const T* const;常成员函数内部变量修改方法:强转/关键字)

    前面我们已经学习了C 中重要的知识点 特别是虚函数可能会有些懵逼 但是需要我们在实践中不断的理解和尝试 写代码是进步最快的方式 接下来将会介绍一些简单但很重要的知识点 本篇介绍常成员函数 总结 1 常成员函数 用于在程序中定义不可修改内部成
  • 关于红楼梦Python文本分析

    1 获取小说文本 读取文件 获取小说文本 读取文件 fn open prepare 红楼梦 曹雪芹 txt encoding utf 8 string data fn read 读出整个文件 fn close 关闭文件 2 对文本进行处理
  • oralce的判断语句

    大家对 IF ELSE 语句应该都很熟悉吧 它是用来对过程进行控制的 在 SQL 的世界中 CASE 语句有类似的效果 下面简单的介绍 CASE 语句的用法 CASE 语句的形式 事实上 CASE 语句有两种形式 1 SELECT 2 简单
  • 10. 微积分 - 微分&链式法则

    文章目录 微分 链式法则 Hi 大家好 我是茶桁 我们上节课讲了导数 并且在最后预告了今天的内容 今天将会是两部分 一部分是 微分 一部分是 链式法则 微分 微分 我们在导论里面提过 它和导数比较像 但是还是有差别的 实际的定义和内容都比较
  • 来吧!一文彻底搞定Vue组件!

    作者 Jeskson 来源 达达前端小酒馆 Vue组件的概述 组件是什么呢 了解组件对象的分析 Vue组件中的data属性 props传递数据的原理到底是什么 事件通信的那些事 如何了解父子组件事件通信 和遇到非父子组件事件通信如何处理 组
  • IP地址与用户行为

    IP地址能够解决网络风险和提高网络安全的原因是 所有的网络请求都会带有IP信息 是访问者的独立标识 另外ip地址的分配和管理比较严格 难以造假 另外ip属于网络层 可以轻松的对其进行阻断 现有的各种网络安全 负载均衡的设备和软件 都是以ip
  • 校园网上报修系统/宿舍报修系统的设计与实现

    摘要 随着科学技术的飞速发展 社会的方方面面 各行各业都在努力与现代的先进技术接轨 通过科技手段来提高自身的优势 校园网上报修系统当然也不能排除在外 从报修信息的统计和分析 在过程中会产生大量的 各种各样的数据 本文以校园网上报修系统为目标
  • 直流电路中升降压(Buck-Boost)变换电路的设计、参数选取及Matlab/Simulik仿真

    创作不易 感谢大家点赞关注支持 感兴趣的可以点击收藏 这一篇文章给大家介绍一种升降压 Buck Boost 直流变换电路 喜欢的可以点击收藏 升降压 Buck Boost 直流变换电路是通过调节开关管占空比的大小 占空比越小 输出电压越小
  • QT 之键盘事件(捕获键盘按下、松开事件)

    我们在做软件时候 经常会碰到这样的场景 比如按下F5进行刷新功能 按下F1进行帮助之类的快捷键方式 那么在QT中该怎样做呢 查阅文档 QT已经实现了这一系列的键盘事件 void QWidget keyPressEvent QKeyEvent
  • 拷贝构造和拷贝赋值

    拷贝构造表示有新的对象被定义 Object obj1 obj2 新的Object对象obj1被定义 此时调用拷贝构造函数 copy construction 拷贝赋值表示没有新的对象被定义 obj1 obj2 obj1是一个已经被声明过的对
  • WebSocket学习

    一 简介 WebSocket 是一种网络通信协议 RFC6455 定义了它的通信标准 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 HTTP 协议是一种无状态的 无连接的 单向的应用层协议 它
  • Pythonの类

    Python是一种面向对象编程语言 因此类在Python中是很重要的概念 类是一种定义数据和行为的模板 可以创建对象并针对特定的问题对其进行操作 在Python中 类的定义以关键字 class 开头 后跟类的名称 类可以包含方法和属性 方法
  • mpvue实现微信小程序样式切换以及本地缓存

    功能描述 在页面A的添加应用中点击 添加 跳转到展示所有应用的页面B 通过点击开关 在页面A中展示所开启的应用 效果展示 代码 页面B代码 div class itembox div class boxhead img div class
  • [HDU 5079][2014 Asia AnShan Regional Contest]Square(DP套DP)

    题目链接 http acm hdu edu cn showproblem php pid 5079 题目大意 给你一个 n n n 8 n middot n n le 8 的棋盘 上面有一些格子必须是黑色 其它可以染黑或者染白 对于一个棋盘
  • python实现逻辑回归三种方法_纯Python实现逻辑回归

    前几天使用后sklearn实现了逻辑回归 这里用纯python实现逻辑回归 首先 我们定义一个sigmoid函数 def sigmoid inX sigmoid函数 return 1 0 1 exp inX 这里使用梯度上升进行逻辑回归 梯
  • 【编译之美】【5. 代码优化:数据流分析】

    有些优化只能在全局优化中做 在本地优化中做不了 比如 代码移动 Code motion 能够将代码从一个基本块挪到另一个基本块 比如从循环内部挪到循环外部 来减少不必要的计算 循环剥离 部分冗余删除 Partial Redundancy E
  • 角落的开发工具集之Vs(Visual Studio)2017插件推荐

    工具善其事 必先利其器 装好这些插件让vs更上一层楼 因为最近录制视频的缘故 很多朋友都在QQ群留言 或者微信公众号私信我 问我一些工具和一些插件啊 怎么使用的啊 那么今天我忙里偷闲整理一下清单 然后在这里面公布出来 Visual Stud
  • 毕业设计-基于深度学习的花卉识别分类

    目录 前言 课题背景和意义 实现技术思路 一 花卉识别相关理论基础 二 基于 ResNeXt 和迁移学习的花卉种类识别 三 基于 EfficientNet 和迁移学习的花卉种类识别 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光
  • scss 中公共变量的导出方法:export

    前言 在使用vue或者react开发项目时都会用到scss 或者less等的扩展语言 那么肯定会有公共变量提取与使用 这篇文章就是记录如何导出公共css变量的 export 关键词 menuText bfcbd9 menuActiveTex
  • React 相关方法(API)介绍-元素与组件操作

    JSX可以减少定义组件的复杂性 但对于React来说JSX并不是必须的 JSX标签最终会被转换为原生的JavaScript 除使用JSX语法外 还可以使用React提供的API来创建组件 本文将介绍使用React创建元素 及一些React中