在一个典型的 React 应用中,数据是通过 props 属性自上而下(由父及子)进行传递的,但此种用法对于某些类型的属性而言是极其繁琐的(例如:地区偏好,UI 主题),这些属性是应用程序中许多组件都需要的。Context 提供了一种在组件之间共享此类值的方式,而不必显式地通过组件树的逐层传递 props。 当 Context Provider 接收的 value 发生变化的时候,React 会向下深度优先遍历组件树,找到消费了该 Context 的组件并标志为需要更新,在组件更新的 render 阶段,这些消费了该 Context 的组件就会重新渲染,读取到最新的 Context 值。 我们通常传递给 Context Provider 的 value 是一个对象,对象里包含多个字段,然而这种常见的场景却可能导致多次不必要的重复渲染。以下述代码为例:
在日常进行业务需求的开发时,经常会遇到需要绘制图表的场景,其中我们使用频率最高的图表库是 ECharts[1]。ECharts 作为市面上最成熟的图表库之一,主要面向 Web 端使用,官方对小程序端也提供了解决方案,而在 RN 的开发场景中却没有比较好的实现方法,面对这种情况以前我们的解决方案有: 1.放弃 ECharts,使用针对RN原生开发的图表库,如 react-native-charts-wrapper、victory-native 等 2.通过 Webview 来使用 web 端的 ECahrts,如 react-native-echarts-pro[2]、native-echarts 等 方案1,RN 现有图表库的样式与交互与 ECahrts 相比有较大差距,图表的丰富性也不足,尤其是有多端需求的场景下,需要为 RN 单独进行UI交互设计,设计与实现成本高。 方案2,通过 Webview 的方式,当页面上有多个图表或者图表元素过多时,会遇到性能方面的瓶颈,比如安卓端的大数据量面积图、单轴散点图等会有白屏现象,而且正常渲染过程中也会有比较明显的卡顿、掉帧的情况。 所以,
在 React 中,"Ref" 具有两个相关的含义,而且经常让人困惑。在本文正式开始之前,我们先弄清楚它的定义: 作为 useRef hook 返回的 “ref 对象”:在这种场景中,它就是一个普通的 JavaScript 对象,具有一个名为 current 的属性,并且可以读取或设置为任意值。 作为 JSX DOM 元素上的 “ref 属性”:用于访问其对应的 DOM 元素 这两者经常一起使用,“ref 对象” 可以传递给 “ref 属性”,React 会将对 DOM 元素设置为它的 current 属性值。
useState 是我们使用最频繁的 React hook,在代码中随处可见,但是也经常会出现一些错误的用法。 或许你已经经历过这些错误的用法,但是可能还没有意识到这是错误,比如写出了一些冗余的、重复的、矛盾的 state,让你不得不额外使用 useEffect 来处理它们。由于这些错误用法的存在,会让代码的可读性变差,提高了代码的维护成本。