1、前言
本节我们添加一个class组件,来完善一下我们的react;
// src/index
import React from '../react'
class Counter extends React.Component {
render() {
return (
<div>
<h1>我是</h1>
<h2>class组件</h2>
</div>
)
}
}
const element = <Counter />
React.render(element, document.getElementById("root"))
2、实现步骤
2.1 Component.js
我们在写class组件时,都会继承一个React.Component,所以我们先创建一个Component.js文件,使用isReactComponent来标识类组件;
// react/Component
export function Component(props) {
this.props = props;
}
Component.prototype.isReactComponent = true;
2.2 修改performUnitOfWork方法
修改performUnitOfWork方法,增加对类组件和函数组件的判断;
function performUnitOfWork(fiber) {
// 函数组件类组件处理
if (fiber.type && typeof fiber.type === 'function') {
fiber.type.prototype.isReactComponent ? updateClassComponent(fiber) : updateFunctionComponent(fiber)
} else {
// 更新普通节点
updateHostComponent(fiber)
}
// 省略
}
/**
* 类组件处理
* @param {*} fiber
*/
updateClassComponent(fiber){
// todo
}
2.3 updateClassComponent方法
/**
* 类组件处理
* @param {*} fiber
*/
function updateClassComponent(fiber){
const {type, props} = fiber;
const children = [new type(props).render()];
reconcileChildren(fiber, children)
}
3、实现效果
4、本节代码
代码地址:https://github.com/linhexs/mini-react/tree/9.class%84%E4%BB%B6/