利⽤⾼阶组件
在函数组件中,并没有 shouldComponentUpdate 这个⽣命周期,可以利⽤⾼阶组件,封装⼀个类似
PureComponet 的功能
使⽤ React.memo
React.memo 是 React 16.6 新的⼀个 API,⽤来缓存组件的渲染,避免不必要的更新,其实也是⼀
个⾼阶组件,与 PureComponent ⼗分类似,但不同的是, React.memo只能⽤于函数组件。
20. 对 React-Intl 的理解,它的⼯作原理?
React-intl是雅⻁的语⾔国际化开源项⽬FormatJS的⼀部分,通过其提供的组件和API可以与
ReactJS绑定。
React-intl提供了两种使⽤⽅法,⼀种是引⽤React组件,另⼀种是直接调取API,官⽅更加推荐在
React项⽬中使⽤前者,只有在⽆法使⽤React组件的地⽅,才应该调⽤框架提供的API。它提供了⼀系
列的React组件,包括数字格式化、字符串格式化、⽇期格式化等。
在React-intl中,可以配置不同的语⾔包,他的⼯作原理就是根据需要,在语⾔包之间进⾏切换。
21. 对 React context 的理解
在React中,数据传递⼀般使⽤props传递数据,维持单向数据流,这样可以让组件之间的关系变得简单
且可预测,但是单项数据流在某些场景中并不适⽤。单纯⼀对的⽗⼦组件传递并⽆问题,但要是组件之间
层层依赖深⼊,props就需要层层传递显然,这样做太繁琐了。
Context 提供了⼀种在组件之间共享此类值的⽅式,⽽不必显式地通过组件树的逐层传递 props。
可以把context当做是特定⼀个组件树内共享的store,⽤来做数据传递。简单说就是,当你不想在组件
树中通过逐层传递props或者state的⽅式来传递数据时,可以使⽤Context来实现跨层级的组件数据传
递。
JS的代码块在执⾏期间,会创建⼀个相应的作⽤域链,这个作⽤域链记录着运⾏时JS代码块执⾏期间所
能访问的活动对象,包括变量和函数,JS程序通过作⽤域链访问到代码块内部或者外部的变量和函数。
假如以JS的作⽤域链作为类⽐,React组件提供的Context对象其实就好⽐⼀个提供给⼦组件访问的作⽤
域,⽽ Context对象的属性可以看成作⽤域上的活动对象。由于组件 的 Context 由其⽗节点链上所
有组件通 过 getChildContext()返回的Context对象组合⽽成,所以,组件通过Context是可以
访问到其⽗组件链上所有节点组件提供的Context的属性。