前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何组合不同版本的React组件到同一项目中

如何组合不同版本的React组件到同一项目中

作者头像
我是leon
修改2022-05-11 10:00:04
2.3K0
修改2022-05-11 10:00:04
举报
文章被收录于专栏:leon的专栏leon的专栏

理解 react、react-dom 和 jsx 之间的关系

react包是React的核心包,负责构建、更新虚拟 dom。

react-dom负责将虚拟 dom 组成的树,渲染到 HTML 的 dom 节点上。

jsxReact提供的语法糖,负责将 DSL(特定领域语言),转换成 javascript。

分析 jsx 的作用

以下是同样效果的代码,用于分辨 jsx 的作用

1、jsx 代码

代码语言:javascript
复制
class Hello extends React.Component {
  render() {
    return <div>Hello {this.props.toWhat}</div>;
  }
}

ReactDOM.render(<Hello toWhat="World" />, document.getElementById("root"));

2、非 jsx 代码

代码语言:javascript
复制
class Hello extends React.Component {
  render() {
    return React.createElement("div", null, `Hello ${this.props.toWhat}`);
  }
}

ReactDOM.render(
  React.createElement(Hello, { toWhat: "World" }, null),
  document.getElementById("root")
);

可以得出:jsx 的作用,是将React.createElement的使用方式,转换成更加易书写的jsx格式。

import React from ‘react’

写 jsx 代码的时候,第一句问题要import React from 'react',为什么?

因为 jsx 代码转换成标准的 javascript 代码后,会变成React.createElement(...),所以需要引入。

组合不同版本的 React 代码

reactreact-dom是需要同版本配套使用的

场景:React15 项目中,引入 React17 的组件 Editor。

解决方案:

  • React17 组件,采用 React17 配套的react-dom进行组件渲染
  • React15 组件,采用 React15 配套的react-dom进行组件渲染
  • React15 提供ref节点,交由被引入的高版本 React 组件,进行render mount操作
代码语言:javascript
复制
// React17 Editor组件
import React from 'react';
import { render, unmountComponentAtNode } from 'react-dom';

const Editor = () => {...};

export default const renderEditor = (container) => {
	return {
		// 渲染
		render(props){
			render(<Editor {...props} />, container);
		}
		// 卸载
		unmount(){
			unmountComponentAtNode(container);
		}
	}
}
代码语言:javascript
复制
// React15 主项目
import React from 'react';
import { render } from 'react-dom';
import App from 'app.jsx';

render(App, document.getElementById('app'));


// app.jsx
import renderEditor from 'editor';

class App extends React.Component{
	componentDidMount(){
		if(this.refs.editor){
			const { render, unmount } = renderEditor(this.refs.editor);
			this.unmount = unmount;
			render({...});
		}
	}
	componentWillUnmount(){
		this.unmount();
	}
	render(){
		return <div ref="editor" />;
	}

}

参考


最近笔者在整理第一本电子书书稿《前端面试手册》,有兴趣的同学可以关注下~

喜欢我文章的朋友,可以通过以下方式关注我:

关注
关注
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 理解 react、react-dom 和 jsx 之间的关系
    • 分析 jsx 的作用
      • import React from ‘react’
      • 组合不同版本的 React 代码
      • 参考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档