-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
手写 React #11
Labels
Comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
目录导读:
正文开始:
新建项目
src
目录下只留下index.js, App.js
文件项目初始化
index.js
src/react.js
文件此时,启动:
yarn start
,浏览器可以看到Hello, World
新增文本组件
src/utils/indes.js
文件src/react.js
文件实现 createElement
src/element.js
文件src/react.js
文件引入src/index.js
文件,测试递归子节点拼成 DOM
src/utils/index.js
文件src/index.js
例子,代码为添加事件委托
src/utils/index.js
文件src/index.js
文件,新增onClick
事件 进行测试实现 Component 组件
src/component.js
文件src/react.js
文件引入src/utils/index.js
文件生命周期的实现
主要实现以下 4 个生命周期:
代码为:
使用 发布订阅模式 实现 componentDidMount,在挂载页面的时候触发事件
import $ from 'jquery' import createReactUnit from './utils' import createElement from './element' import Component from './component.js' let React = { render, nextRootIndex: 0, createElement, Component } // 给每一个元素添加一个属性,为了方便获取这个元素 function render(element, container) { // 写一个工厂函数,用来创建 React 元素 let createReactUnitInstance = createReactUnit(element) let markUp = createReactUnitInstance.getMarkUp(React.nextRootIndex) $(container).html(markUp) // 触发挂载完成的方法 + $(document).trigger('mounted') // 所有组件都 OK 了,发射之前订阅的函数 } export default React
setState 方法实现
实际上,执行 setState 动作的时候,做了 2 件事,更新 数据,更新视图
setState
方法src/utils/index.js
文件写在最后:
参考资料:
The text was updated successfully, but these errors were encountered: