[react] createElement与cloneElement两者有什么区别?

  • createElement是创建一个React元素,jsx即是这个函数的语法糖;它的函数签命是React.createElement(type, [props], [...children])
  • cloneElement是拷贝一个React元素,可选择在修改它的props后,再返回一个新的React元素;它的函数签命是React.cloneElement(element, [props], [...children]): ReactElement,这个函数常结合React.Children.map一起使用,修改props.children的props,来进行一些额外的操作,如下
/** 以下代码实现点击子组件是,先执行父组件的onClick方法,再执行子组件的onClick方法*/
import React from 'react';function Tab(props) {const _onClick = (onclick) => {props.onClick();onclick();};return <ul onClick={props.onClick}>{React.Children.map(props.children, child => {const childProps = child.props;const newProps = {...childProps,onClick: _onClick.bind(null, childProps.onClick)}return React.cloneElement(child, newProps);})}</ul>
}function TabItem(props) {const onClick = event => {event.stopPropagation();props.onClick(event);}return <li onClick={onClick}>{props.children}</li>
}function Demo() {const onClickTab = () => {console.log('onClickTab')}const onClickItem = () => {console.log('onClickItem')}return <Tab onClick={onClickTab}><TabItem onClick={onClickItem}>111</TabItem><TabItem onClick={onClickItem}>222</TabItem><TabItem onClick={onClickItem}>333</TabItem></Tab>
}export default Demo;

个人简介

我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,
但坚持一定很酷。欢迎大家一起讨论

主目录

与歌谣一起通关前端面试题

[react] createElement与cloneElement两者有什么区别?相关推荐

  1. 前端战五渣学React——JSX React.createElement() React.ReactElement()源码

    最近<一拳超人>动画更新第二季了,感觉打斗场面没有第一季那么烧钱了,但是剧情还挺好看的,就找了漫画来看.琦玉老师真的厉害!!!打谁都一拳,就喜欢看老师一拳把那些上来就吹牛逼的反派打的稀烂, ...

  2. [react] react与angular、vue有什么区别?

    [react] react与angular.vue有什么区别? Angular以前有接触过,我的感觉是,这不像React和Vue一样是构架+补充库(比如需要另外的全家桶来配合使用),它的功能非常完整, ...

  3. [react] Mern和Yeoman脚手架有什么区别?

    [react] Mern和Yeoman脚手架有什么区别? MERN是一种脚手架工具,可使用Mongo,Express,React和Nodejs轻松构建同构应用 Yeoman也是脚手架工具,它是基于No ...

  4. [react] 在React中组件和元素有什么区别?

    [react] 在React中组件和元素有什么区别? 组件首字母大写 组件是由元素构成的.元素数据结构是普通对象,而组件数据结构是类或纯函数 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚 ...

  5. [react] 使用PropTypes和Flow有什么区别?

    [react] 使用PropTypes和Flow有什么区别? Flow 是一个针对react项目所有 JavaScript 代码的静态类型检测器,需要单独添加依赖并手动运行 PropTypes是针对组 ...

  6. [react] super()和super(props)有什么区别?

    [react] super()和super(props)有什么区别? react 中的class 是基于es6的规范实现的, 继承是使用extends关键字实现继承的,子类必须在constructor ...

  7. React.createElement使用

    React.createElement一看这个就能和document.createElement方法类似,创建元素 document.createElement是创建一个指定的元素节点,其参数只有一个 ...

  8. React.createElement的理解使用

    React.createElement(): 根据指定的第一个参数创建一个React元素. React.createElement(type,[props],[...children] ) 第一个参数 ...

  9. React.createElement()的使用

    React.createElement()根据指定的第一个参数来创建一个虚拟DOM React.createElement(标签名,属性props对象, 子节点1,子节点2 -) 1. 第一个参数必填 ...

最新文章

  1. TVM vs TensorRT比较
  2. 宗宁:全面解析微博财报数据爆发下的平台机会
  3. js 获得radio的值
  4. django2.x/3.x 前端页面在debug模式中找不到动态文件static
  5. 1年经验却拿总监薪资?看到他做的数据可视化报表,我彻底服了
  6. vscode为各自项目添加launch和setting
  7. java宠物实训报告,基于Java的宠物用品商城的设计与实现-开题报告
  8. 基于 koajs 的前后端分离实践
  9. vue.js实现自定义输入分页
  10. IP静态路由实验(基于华为eNSP模拟器)
  11. 基于SSH开发报刊订阅管理系统的设计与实现
  12. 各种光纤接口类型介绍
  13. UI自动化常见的等待方式
  14. 常见的压力面试题及面试技巧
  15. 计算机应用基础中级,《计算机应用基础》中级测试题-针对考题实操
  16. debug模式启用浏览器
  17. Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resour
  18. openEuler 开源汇智赢未来|2023开放原子全球开源峰会OpenAtom openEuler 论坛成功召开
  19. 企业数字化转型该怎么做?有效工具有哪些?
  20. 【STM32开发小技巧】CUBEMX改变工程模板(FreeMarker一键生成定制文件)

热门文章

  1. 趣味数据故事_坏数据的好故事
  2. 云原生数据库_数据标签竞赛云原生地理空间冲刺
  3. c++编码风格指南_带回家的编码挑战的基本指南
  4. 查看这些有用的ECMAScript 2015(ES6)提示和技巧
  5. cnn对网络数据预处理_CNN中的数据预处理和网络构建
  6. 基于ASP.NET的新闻管理系统(三)代码展示
  7. *** Python版一键安装脚本
  8. 句子相似度--余弦相似度算法的实现
  9. mysql之group_concat函数
  10. linux下安装配置jdk(解压版)