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)介绍-元素与组件操作 的相关文章

  • 漏洞情报

    点击上方 订阅话题 第一时间了解漏洞威胁 0x01 漏洞描述 WordPress ProfilePress 原 WP User Avatar 是一个轻量级会员插件 可用于创建用户画像 会员目录和用于用户注册 登录 密码重置及用户信息编辑的前

随机推荐

  • 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中