1、react中key的作⽤
2、⽣命周期,新旧⽣命周期的不同
3、函数组件和component组件的区别
4、控制组件和⾮受控组件的区别
5、⽗⼦组件通信
6、state和props的区别
7、setState的原理
8、虚拟dom,以及使⽤虚拟dom有什么好处
9、react diff算法
10、refs的作⽤
11、redux
12、react的render props的作⽤
13、⾼阶组件
14、react hooks的优缺点?
优点⼀:更容易复⽤代码。它通过⾃定义 hooks 来复⽤状态,从⽽解决了类组件有些时候难以复⽤逻辑的问题。 具体如下:每调⽤ useHook ⼀次都会⽣成⼀份独⽴的状态,函数每次调⽤都会开辟⼀份独⽴的内存空间。虽然状态
( from useState )和副作⽤( useEffect )的存在依赖于组件,但它们可以在组件外部进⾏定义。 上⾯这两点,⾼阶组件和renderProps也同样能做到。但hooks实现起来的代码量更少,以及更直观(代码可读 性)。举个例⼦,我们经常使⽤的 antd-table ,我们经常需要写⼀些状态: pagination={current:xxx,
pageSize:xxx,total:xxx} 。但许多场景只是简单的表格,我们希望封装⼀个⾼阶组件,⾃带这些状态,并可以⾃动 调⽤ server 去获取 remote data 。useTable和tableProps的代码是分离的,但⾼阶组件⼀多,代码会变得较难 阅读, 你难以区分这个props是来⾃哪个⾼阶组件,或者还是来⾃业务的⽗组件。 相对⽐⾼阶组件“祖⽗=>⽗=>⼦”的层层嵌套,把" useTable "和输出的值写到⼀起,结构更清晰,更容易阅读和 维护。对⽐⾼阶组件,代码量更少。
优点⼆:清爽的代码⻛格 函数式编程⻛格,函数式组件、状态保存在运⾏环境、每个功能都包裹在函数中,整体⻛
格更清爽,更优雅。另外,对⽐类组件,函数组件⾥⾯的unused状态和unused-method更容易被发现。
优点三:代码量更少 向props或状态取值更加⽅便,函数组件的取值都从当前作⽤域直接获取变量,⽽类组件需要 先访问实例引⽤ this ,再访问其属性或者⽅法,多了⼀步。更改状态也变得更加简单, this.setState({
count:xxx }) 变成 setCount(xxx) 。因为减少了很多模板代码,特别是⼩组件写起来更加省事,⼈们更愿意去拆分 组件。⽽组件粒度越细,则被复⽤的可能性越⼤。所以, hooks 也在不知不觉中改变⼈们的开发习惯,提⾼项⽬的组件复⽤率。
缺点:
1、响应式的useEffect 你必须清楚代码⾥和useCallback api的第⼆个参数依赖性数组的改变时机,并且掌握上下⽂的触发时机。当逻辑较复杂的时候, 触发的次数,可能会被你预想的多。对⽐componentDidmount componentDidUpdate 带来的⼼智负担更⼤。
2、状态不同步 函数的运⾏是独⽴的,每个函数都有⼀份独⽴的作⽤域。函数的变量是保存在运⾏时的作⽤域⾥ ⾯,当我们有异步操作的时候,经常会碰到异步回调的变量引⽤是之前的,也就是旧的(这⾥也可以理解成闭包)。⽤
useRef 返回的 immutable RefObject ( current 属性是可变的)来保存 state , 怎么
避免 react hooks 的常⻅问题
不要在 useEffect ⾥⾯写太多的依赖项,划分这些依赖项成多个单⼀功能的 useEffect 。其实这点是遵循了软 件设计的“单⼀职责模式”。 如果你碰到状态不同步的问题,可以考虑下⼿动传递参数到函数。
15、使⽤typescript的好处和缺点?泛型的作⽤及使⽤场景
什么是TypeScript
TypeScript 是 JavaScript 的⼀个超集,主要提供了类型系统和对 ES6 的⽀持。TypeScript 是
JavaScript 的类型的超集,它可以编译成纯 JavaScript。编译出来的 JavaScript 可以运⾏在任何浏览器上。
TypeScript 编译⼯具可以运⾏在任何服务器和任何系统上。TypeScript 是开源的。
TypeScript的设计⽬的应该是解决JavaScript的“痛点”:弱类型和没有命名空间,导致很难模块化,不适合开发 ⼤型程序
TypeScript优点:
1、TypeScript 增加了代码的可读性和可维护性。
2、TypeScript ⾮常包容:
TypeScript 是 JavaScript 的超集,.js ⽂件可以直接重命名为 .ts 即可
即使不显式的定义类型,也能够⾃动做出类型推论
可以定义从简单到复杂的⼏乎⼀切类型 即使 TypeScript 编译报错,也可以⽣成 JavaScript ⽂件 兼容第三⽅库,即使第三⽅库不是⽤ TypeScript 写的,也可以编写单独的类型⽂件供 TypeScript 读取
3、TypeScript 拥有活跃的社区 ⼤部分第三⽅库都有提供给 TypeScript 的类型定义⽂件
Google 开发的 Angular2 就是使⽤ TypeScript 编写的
TypeScript 拥抱了 ES6 规范,也⽀持部分 ESNext 草案的规范 使⽤ TS 的缺点
1、短期内增加开发成本,但是增加类型注释可减少维护成本
2、集成到构建流程需要⼀些⼯作量
3、可能和⼀些库结合的不是很完美 泛型的作⽤及使⽤场景: 泛型:泛型的本质是参数化类型,通俗的将就是所操作的数据类型被指定为⼀个参数,这种参数类型可以⽤在类、接
⼝和⽅法的创建中,分别成为泛型类,泛型接⼝、泛型⽅法。
为什么使⽤泛型
TypeScript 中不建议使⽤ any 类型,不能保证类型安全,调试时缺乏完整的信息。
TypeScript可以使⽤泛型来创建可重⽤的组件。⽀持当前数据类型,同时也能⽀持未来的数据类型。扩展灵活。可 以在编译时发现你的类型错误,从⽽保证了类型安全。
16、react fiber的原理
17、react-thrunk中间件
网友评论