{ uncategorized }

  • setState 是同步还是异步

    /

    以下内容均基于 16.8.6 版本。

    setState 是同步还是异步,这个问题很多人讨论过,各种说法都有,面试时也经常会问到,那它到底是同步还是异步呢?

    我认为,它既是同步的,也是异步的。

  • react 源码中的 findHighestPriorityRoot 方法

    /

    在看源码时,可以看到有这么一个方法,从函数名来看,是「找到优先级最高的 root」,但每个应用只有一个 root,那为什么还要去「找」呢?
    因为 react 支持多个实例,即支持调用多次 ReactDOM.render。如果他们同时发生更新,也要有个先后关系,这个方法,就是用来从多个实例对应的 root 中,找出最先进行更新的那个 root

  • React 源码中的位运算

    | /

    react 源码过程中,发现这样的代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    const NoContext = /*                    */ 0b000000;
    const BatchedContext = /* */ 0b000001;
    const EventContext = /* */ 0b000010;
    const DiscreteEventContext = /* */ 0b000100;
    const LegacyUnbatchedContext = /* */ 0b001000;
    const RenderContext = /* */ 0b010000;
    const CommitContext = /* */ 0b100000;

    let executionContext = NoContext;
    executionContext &= ~BatchedContext;
    executionContext |= LegacyUnbatchedContext;

    if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
    // We're inside React, so it's fine to read the actual time.
    return msToExpirationTime(now());
    }

    ~|& 都是「位运算操作符」,平常写代码很少会用到,导致完全不理解这些运算符有什么用,react 源码中这些代码到底是什么意思呢?

  • nodejs 中的 Cache-Control

    | /

    我一直对前端需要「熟悉」浏览器缓存是持疑问态度的,因为前端无法控制缓存,即无法通过代码或者某种方式来指定某些资源是否需要缓存。
    举个例子,我们的 index.html 文件中引入了 bundle.js 这个文件,我们希望在每次刷新页面时,都不要使用缓存,每次都去服务器获取最新的 bundle.js 文件。
    要实现这个需求,只从前端的角度来思考,怎么做?
    或许有人会说 meta 标签支持指定 Cache-Control,但这是针对全站资源,如果只是针对特定的资源如 bundle.js 获取最新的,其他资源照样使用缓存。
    似乎是无法实现的。那什么角色应该了解这些内容呢?

  • Three.js 渲染自定义模型

    | /

    Three.js 虽然内置了一些模型,但在实际业务中往往需要导入外部模型,导入的模型可以视为自定义模型。

    首先要知道的是模型本质上来说是「三维坐标的集合」,最简单的一个模型可以用三个坐标和连接这三个坐标的「面」来表示。

  • antd 自定义表单的问题 - 2

    | /
    antd 自定义表单的问题 - 1

    前面提到,「基本信息」包含姓名、出生年月、性别、城市以及邮箱共 5 个输入项。而其中性别、省市与邮箱封装为了单独的组件,因为这类组件包含特有的数据或者逻辑

    • 性别选择,因为有性别对应的 value。当然也可以将性别数据作为常量引入。
    • 省市选择,包含了省市信息。
    • 邮箱,有补全邮箱后缀等逻辑。

    antd官网中「自定义表单组件」就是一个有「特有逻辑」的组件,它同时包含两个字段。

  • antd 自定义表单的问题 - 1

    | /

    在使用 antd 的表单过程中,发现存在许多的问题。该博客会对我曾经遇到过的问题做一个总结,由于内容太多,所以预计会分成 3 篇。

    这是该主题的第一篇,主要介绍「什么是自定义表单」。全文会以「简历表单」作为示例来进行说明。