自己写一个 react 1.基础

发布于 2022-02-24 13:58:30 字数 1662 浏览 1068 评论 0

要想深入学习一个前端的框架/库,最好的方法是自己动手造个轮子,对于熟悉框架的内部原理很有帮助。造轮子一开始先不求生产能用,以自己的基础知识及大脑的第一反应先去实现,再去跟其他的实现进行对比,逐渐完善。

比如我想自己实现一个 react,那么就要从用法入手,例如这样
https://github.com/facebook/react/blob/183aefa51f5b7b18bde05dccdd417b8983d741d0/README.md#examples

class HelloMessage extends React.Component {
  render() {
    return <div>Hello {this.props.name}</div>;
  }
}

ReactDOM.render(
  <HelloMessage name="Taylor" />,
  document.getElementById('container')
);

首先我们要知道,上面的代码不能直接在浏览器运行,在浏览器运行的是经过 babel 转译的代码,我们可以去这里进行转译,转译之后的代码如下

class HelloMessage extends React.Component {
  render() {
    return React.createElement(
      "div",
      null,
      "Hello ",
      this.props.name
    );
  }
}

ReactDOM.render(React.createElement(HelloMessage, { name: "Taylor" }), document.getElementById('container'));

很明显,我们要实现

React.Component, React.createElement, ReactDOM.render

等 api

我的第一反应,ComponentcreateElement 等的作用是做一个标记,以一个对象为基础,记录一个 dom 应该有的信息,比如标签名,属性,子元素等。(可能还有其他的一些信息,但有最基础的,就可以进行渲染了,我们先实现基础的)然后 render 就是利用上面的信息,以浏览器 api 进行渲染。

于是就有了第一版的 diyReact https://github.com/p2227/diyReact/blob/6ea38a16f9466df8b0beb61e48b0d6703fac119d/src/stage0-base.js

这里面提一下,在实现 render 的时候,我的第一反应是,构造一个容器 dom,再把 div 等元素塞进去,但是后来发现并不需要这样做,后面我会记录一下这个思考的过程。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文