刚学react产生的一些疑问?

#1

1.命名,像react生命周期中,命名都叫componetWillMount,虽然看着能理解,但是不是命名太长了,感觉有些别扭,是不是像mount这样更友好;
2.库和默认配置,我感觉很多东西可以集成到react中,比如propTypes,但react都将他剥离出去然后在项目中再导入,还有就是很多地方必须要进行配置,而这些地方实际上大多情况是采取某个默认值,为什么要做这样设计;
3.公用问题,很多东西实际上是全局公用,是出于什么目的,要单独在页面中导入(import { Checkbox, Alert, Icon } from ‘antd’;),有什么好处或缺点

#2

第一个问题

其实不算是个问题, mount这个才叫奇怪, mount属于操作函数, onMount, willMount, beforeMount, afterMount, didMount, onMounted, onMounting, 这一类的命名方式,属于生命周期函数,在某一个生命周期之前or之后执行。

第二个问题

  1. 剥离这种行为在react系的产品里算是超级常见,把核心库分离算是很常见的,每个核心库处理自己领域内的问题.
    propTypes要处理的是类型检查的问题, 如果用typescript写的话, 由于ts有自带的类型检查,完全不需要用propType,
    react-dom处理的是web端react和dom之间关系的库, react-native处理的是native端react之间端关系
  2. 像redux, 非要弄一个redux + react-redux才能用, redux是一个完整的独立的状态解决方案, 而react-redux是 redux 和 react的粘合剂,这样redux就不再受限于react,也一样可以在angular等其他场景里使用,
    这个算是按需使用

第三个问题和第二个问题没有太本质的区别, 主要还是处理包体积的用处

以antd为例, 如果使用全局,则需要全局加载一个antd包,完整的包包含了所有的antd组件,而事实上项目根本用不了那么多组件,
如果用上述import { Checkbox, Alert, Icon } from ‘antd’;这种导入方式,加入一些babel插件(antd官网好像有介绍)
会编译成
var Checkbox = require(“antd/lib/Checkbox”)
var Alert = require(“antd/lib/Alert”)
var Icon = require(“antd/lib/Icon”)
这样打包的时候就不会吧整个antd打包进来, 只会打包所需的部分, 最后体积比较小

1 Like
#3

回答的很细致、到位,但是最后一个问题,个人觉得写成结构是为了更方便书写,以至于后面可以直接用,而不必使用antd.CheckBox这样调用。因为打包机制都是完整打包的,比如引入了antd,那么会把整个antd的生产包加入到你的工程里面,其次引入都是单例的,也就是不管在页面中哪里引用最终只会引入一次,其他地方使用的时候公用的是这个包的地址(可能不对,但这是我的见解,希望大家能提出来一起讨论:grin:)。