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

Posted 前端小歌谣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[react] createElement与cloneElement两者有什么区别?相关的知识,希望对你有一定的参考价值。

[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两者有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 React.createElement() 会创建一个对象?

为啥 React 组件是通过 `React.createElement()` 方法执行的?

如何使用 React.createElement 添加悬停 CSS 样式

React底层 render, createElement 方法作用梳理

React.createElement:类型无效(地图)

React中createElement 和 cloneElement 的区别