首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

新的一年,从手写mini react开始

首先第一行,这是一段jsx代码,原生的javascript是不会被识别的,将其变成原生React代码应该是这样的 // const element = FE情报局...,通过createDom这个方式来执行对应的逻辑,而createDom函数参数应该是每一个fiber节点 function createDom(fiber){ const dom = fiber.type...[name] }) return dom } render函数,我们需要设置nextUnitOfWork为根节点 function render(element, container){...commitWork(fiber.child) commitWork(fiber.sibling) } Reconciliation 到现在我们只是向dom添加了对应的内容,如果更新或着删除节点该怎么做...,调用堆栈应该会显示: workLoop performUnitOfWork updateFunctionComponent 我们没有包含很多 React 功能和优化,因为这是一些细致内容 我们渲染阶段遍历整棵树

44210

【React进阶-3】从零实现一个React(下)

调和过程 到目前为止的话我们仅仅实现了DOM元素的渲染和添加这些过程,如果我们的元素要删除、更新的话应该怎么做,这就是接下来要介绍的,也就是调和过程。...在此过程我们忽略掉一些其他的信息之后,其实仅仅关心oldFiber和element。...但是我们知道,如果此时将这个函数组件的JSX向JS转换的时候,它应该会做以下的转变: /** @jsx XbcbLib.createElement */ function App(props) {...比如在我们的示例代码,它的fiber.type就是一个App函数,所以我们调用它之后会返回一个h1的dom元素。...但是我们的代码没有包括很多React的功能和优化。例如,我们可以看看react中有些操作它是怎么做的: XbcbLib,我们渲染阶段遍历整棵树。

70011
您找到你想要的搜索结果了吗?
是的
没有找到

React 学习笔记(基础篇)

JSX JSX 插入 name 的变量,将变量包裹在大括号,也可以大括号中使用任何有效的 JavaScript 表达式 JSX 也是一个表达式,在编译之后,JSX 表达式会被转换成 js 函数调用...,并且对其取值后得到的 JavaScript 对象 这就意味着我可以 if 语句和 for 循环语句中使用 JSX,将 JSX 赋值给一个变量,将 JSX 作为参数,以及函数返回等等 JSX 指定属性的时候...通过 React DOM 保持 DOM 和 React 元素一致 (这是怎么做到的?)...,可能需要隐藏组件,要完成这个操作,可以让 render 方法直接返回 null,而不进行任何渲染 列表 & key 渲染多个组件:通过使用 {} JSX 内构建一个元素集合 关于 key 值的设置...如果有多个组件依赖于同一个 state,那么我们应该将它提升到这些组件的最近共同父组件

1.5K10

前端经典react面试题(持续更新)_2023-03-15

React必须使用JSX吗?React 并不强制要求使用 JSX。当不想在构建环境配置有关 JSX 编译时,不在 React 中使用 JSX 会更加方便。...扩展一下,如果是根据用权限来判断是否隐藏组件该怎么做?...listeners.forEach((l) => l()) } //订阅状态变化事件,当状态改变发生之后执行监听函数 let subscribe = (listener...为了降低时间复杂度,react 的 diff 算法做了一些妥协,放弃了最优解,最终将时间复杂度降低到了 O(n)。那么 react diff 算法做了哪些妥协?...换个说法就是, React中元素是页面DOM元素的对象表示方式。 React组件是一个函数或一个类,它可以接受输入并返回一个元素。

1.3K20

通过webpack的require.context,去路由中心化管理

官网解释: 您可以使用require.context()函数创建自己的上下文。 它允许您传入一个目录进行搜索,一个标志表示是否也应该搜索子目录,以及一个正则表达式来匹配文件。...构建时,webpack解析代码的require.context()。...我src文件夹下的APP.jsx中使用webpack的require.context API require.context('....导出的函数有3个属性:解析、键值、id。 resolve是一个函数返回解析后的请求的模块id。 keys是一个函数,它返回上下文模块可以处理的所有可能请求的数组。.../pages', true, /\.jsx$/)); console.log(cache,'cache') 我得到一些模块信息: 大家可能会联想到路由结合的使用,放一个示例代码,之前我们react

1K10

使用require.context,实现去路由中心化管理

官网解释: 您可以使用require.context()函数创建自己的上下文。 它允许您传入一个目录进行搜索,一个标志表示是否也应该搜索子目录,以及一个正则表达式来匹配文件。...构建时,webpack解析代码的require.context()。...导出的函数有3个属性:解析、键值、id。resolve是一个函数返回解析后的请求的模块id。keys是一个函数,它返回上下文模块可以处理的所有可能请求的数组。.../pages', true, /\.jsx$/)); console.log(cache,'cache') 我得到一些模块信息: image.png 大家可能会联想到路由结合的使用,放一个示例代码...,之前我们react写声明式路由,集中化管理需要这样: // rootRoute.jsconst rootRoute = { childRoutes: [ {

1K20

React Native开发之React基础

当为一个React.Component子类定义构造函数时,你应该在任何其他的表达式之前调用super(props)。否则,this.props构造函数中将是未定义,并可能引发异常。...它应该返回一个对象来更新状态,或者返回null来表明新属性不需要更新任何状态。 注意,如果父组件导致了组件的重新渲染,即使属性没有更新,这一方法也会被调用。...当被调用时,其会检查this.props 和 this.state并返回以下类型的一个: React元素。 通常是由 JSX 创建。...render() 函数应该是纯粹的,也就是说该函数不修改组件的 state,每次调用都返回相同的结果,不读写 DOM 信息,也不和浏览器交互(例如通过使用 setTimeout)。...该方法初始化渲染的时候不会调用,使用 forceUpdate 方法的时候也不会。如果确定新的 props 和 state 不需要重新渲染,则此处应该 返回 false。

1.9K20

手写系列-实现一个铂金段位的React

为什么是铂金,因为和王者还有很远的距离。本文仅实现简单版本的 React,参考 React 16.8 的基本功能,包括虚拟 DOM、Fiber、Diff 算法、函数式组件、hooks 等。...,告诉 babel 转译我们指定的函数,来使用 JSX 语法,代码如下: /** @jsx myReact.createElement */ const element = ( <div id=...当 dom tree 很大的情况下,渲染过程,页面上是卡住的状态,无法进行用户输入等交互操作。...(workLoop) } // 通知浏览器,空闲时间应该执行 workLoop requestIdleCallback(workLoop) // 执行单元事件,并返回下一个单元事件 function...} 复制代码 render 设置第一个工作单元为 fiber 根节点; fiber 根节点仅包含 children 属性,值为参数 fiber。

82410

2022必备react面试题 附答案

返回或进入除了选择地址以外的页面,清掉存储的sessionStorage,保证下次进入是初始化的数据 history API: History API 的 pushState 函数可以给历史记录关联一个任意的可序列化...state,所以可以路由 push 的时候将当前页面的一些信息存到 state ,下次返回到这个页面的时候就能从 state 里面取出离开前的数据重新渲染。...这个方法适合一些需要临时存储的场景。 4. React必须使用JSX吗? React 并不强制要求使用 JSX。...进一步阅读 React 对比函数式组件和类组件 React 函数与类组件比对 9. React keys 的作用是什么?...key 应该是唯一ID,最好是 UUID 或收集项的其他唯一字符串: {todos.map((todo) => {todo.text

1.8K40

【React进阶-2】从零实现一个React(上)

,我们先来复习一下react一些基础概念,尝试搞清楚React、JSX、DOM等这些东西是何如进行工作的。...,也就是传到createElement()方法的第三个参数一些信息,我们的代码里面,children属性的值就是一个字符串”X北辰北”。...介绍Fiber之前,我们先通过一些篇幅来介绍下react为何会引入fiber这个概念。...函数一般会按先进先调用的顺序执行,除非函数浏览器调用它之前就到了它的超时时间。...,然后仅仅留下创建dom节点的代码,然后将这个节点返回,并将render函数改名为createDom()函数,同时在下方创建一个render函数,并指定参数,里面内部详细的代码我们接下来继续实现。

1.2K32

前端react面试题合集_2023-03-15

React 的实现:通过给函数传入一个组件(函数或类)后函数内部对该组件(函数或类)进行功能的增强(不修改传入参数的前提下),最后返回这个组件(函数或类),即允许向一个现有的组件添加新的功能,同时又不去修改该组件...什么是装饰者模式:不改变对象自身的前提下在程序运行期间动态的给对象添加一些额外的属性或行为可以提高代码的复用性和灵活性。...在编译完成之后,JSX 表达式就变成了常规的 JavaScript 对象,这意味着你可以 if 语句和 for 循环内部使用 JSX,将它赋值给变量,接受它作为参数,并从函数返回它。...,每一个新创建的函数都有定义自身的 this 值(构造函数是新对象;严格模式下,函数调用的 this 是未定义的;如果函数被称为“对象方法”,则为基础对象等),但箭头函数不会,它会使用封闭执行上下文的...扩展一下,如果是根据用权限来判断是否隐藏组件该怎么做

2.8K50
领券