以下内容均基于 16.8.6 版本。
setState
是同步还是异步,这个问题很多人讨论过,各种说法都有,面试时也经常会问到,那它到底是同步还是异步呢?
我认为,它既是同步的,也是异步的。
在看源码时,可以看到有这么一个方法,从函数名来看,是「找到优先级最高的 root
」,但每个应用只有一个 root
,那为什么还要去「找」呢?
因为 react
支持多个实例,即支持调用多次 ReactDOM.render
。如果他们同时发生更新,也要有个先后关系,这个方法,就是用来从多个实例对应的 root
中,找出最先进行更新的那个 root
。
看 react
源码过程中,发现这样的代码
1 | const NoContext = /* */ 0b000000; |
~
、|
和 &
都是「位运算操作符」,平常写代码很少会用到,导致完全不理解这些运算符有什么用,react
源码中这些代码到底是什么意思呢?
我一直对前端需要「熟悉」浏览器缓存是持疑问态度的,因为前端无法控制缓存,即无法通过代码或者某种方式来指定某些资源是否需要缓存。
举个例子,我们的 index.html
文件中引入了 bundle.js
这个文件,我们希望在每次刷新页面时,都不要使用缓存,每次都去服务器获取最新的 bundle.js
文件。
要实现这个需求,只从前端的角度来思考,怎么做?
或许有人会说 meta
标签支持指定 Cache-Control
,但这是针对全站资源,如果只是针对特定的资源如 bundle.js
获取最新的,其他资源照样使用缓存。
似乎是无法实现的。那什么角色应该了解这些内容呢?
Three.js
虽然内置了一些模型,但在实际业务中往往需要导入外部模型,导入的模型可以视为自定义模型。
首先要知道的是模型本质上来说是「三维坐标的集合」,最简单的一个模型可以用三个坐标和连接这三个坐标的「面」来表示。
手上接到一个需求,将多种图片经过放大、旋转后绘制在一张 canvas
上,放大都还好理解,但旋转真的是废头发。
babel-preset-es2015
是能将 es2015
新特性转换成 es3
的 babel plugin
的集合,这些集合到底包含了哪些插件呢,这篇博客会一一列出。
前面提到,「基本信息」包含姓名、出生年月、性别、城市以及邮箱共 5 个输入项。而其中性别、省市与邮箱封装为了单独的组件,因为这类组件包含特有的数据或者逻辑。
antd
官网中「自定义表单组件」就是一个有「特有逻辑」的组件,它同时包含两个字段。
在使用 antd 的表单过程中,发现存在许多的问题。该博客会对我曾经遇到过的问题做一个总结,由于内容太多,所以预计会分成 3 篇。
这是该主题的第一篇,主要介绍「什么是自定义表单」。全文会以「简历表单」作为示例来进行说明。