React系列之React版本时间线和主要更新

参考: https://github.com/facebook/react/releases + 一些博客文章

React 起源于 Facebook 的内部项目,在 2013 年开源正式推出。

  • 2016.4 React15: 之前都是 v0.xx,到这时候直接变成 v15,可见对这个库的重视和发展意图。

    • 初始渲染使用 document.createElement 而不是生成大量 HTML 字符串再通过 node.innerHTML 设置。这样做可以提高 React 的性能。
    • 等等内容,具体可以点上面链接看,主要还是在构建这个库的完整性和底层效率。
  • 2017.9 React16.0: 主要是引入了异步渲染和 React Fiber,提高了渲染性能。

    • 在 React15 的时候架构层分为 Reconciler(协调器)负责找出变化的组件和 Renderer(渲染器)负责将变化的组件渲染到页面上,更新是同步的,一旦开始更新直到页面渲染前都不能中断。在 React16 中加入 Scheduler(调度器)负责调度任务的优先级,高优任务优先进入 Reconciler。
    • Fiber 的引入将原本的同步更新过程碎片化,避免主线程的长时间阻塞,使应用的渲染更加流畅。具体可看这篇:
  • 2018.3 React16.3: 主要生命周期的改变。

  • 2019.2 React16.8: 主要引入了 Hooks。

    • 引入了 Hooks,改变了函数组件的写法,提供了一种新的状态管理和副作用处理方式。具体看这篇:React系列之常用ReactHook
  • 2020.10 React17: 过度版本。

    • 没有 API 修改,也就是没有用户可见的新特性。主要关注于平滑迁移和新特性的稳定性。
    • React v17将支持渐进式更新策略。说白了,从React v17后,如果你在项目中同时使用两个版本的React时,将不会出现任何问题。这将更有利于进行老项目的迁移和升级。官方还给出了一个渐进式更新的的例子:https://github.com/reactjs/react-gradual-upgrade-demo/
    • 内部机制是有更新的,https://legacy.reactjs.org/blog/2020/08/10/react-v17-rc.html 比如,事件系统就进行了调整。React 事件见这篇:todo。
  • 2022.3 React18:

    • setState 自动批处理。在数据层,将多个状态更新批量处理,合并成一次更新。即使我们更新了两个状态,每次更新组件也只渲染一次。之前只有在 react 事件处理函数中,才会自动执行批处理,其它情况会多次更新。在 18 之后,任何情况都会自动执行批处理,多次更新始终合并为一次。(如果想关闭自动批处理,可以使用 flushSync 包裹状态更新函数,但是官方不建议这么做)
    • Concurrent Mode 并发渲染模式。在 React 17 中就可以通过一些试验性的 api 开启 CM。它本身并不是一个功能,而是一个底层设计。在 Concurrent 模式中,可以同时更新多个状态,渲染可以被中断和继续,也有优先级。从同步不可中断更新变成了异步可中断更新。
    • Transitions,控制渲染优先级。提供两个 api, useTransition(hook) 和 startTransition,如果需要标记哪些渲染是低优先级的,可以用上述 api 包裹,对于有大量渲染的情况可以区别处理。
    • Suspense, 同时需要请求多个 api 的页面。Suspense 提供了一种统一的机制,使得组件可以等待异步操作的完成,并在数据加载过程中展示 loading 状态,而不需要在每个异步组件中手动管理 loading 状态。
  • 2024.? React19

    • 可能会有新编译器,在使用新编译器以前,我们使用 useMemo、useCallback 和 memo 来手动缓存状态,以减少不必要的重新渲染,这种实现方式虽然可行,但 React 团队认为这并不是他们认为理想的方式,他们一直寻找让 React 在状态变化时自动且只重新渲染必要部分的方案。
  • 39
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Native 是一款跨平台移动应用开发框架,可以使用 JavaScript 和 React 编写原生移动应用。如果你想要实现天猫物流跟踪时间轴的功能,可以考虑使用 React Native 开发。 下面是一个简单的实现流程: 1. 安装 React Native 开发环境,可以参考官方文档进行安装。 2. 创建一个新的 React Native 项目,使用 `react-native init` 命令可以快速创建一个新项目。 3. 在项目中安装 `react-native-timeline-flatlist` 组件,这个组件可以帮助我们实现时间轴的效果。 ``` npm install react-native-timeline-flatlist --save ``` 4. 在项目中创建一个新的组件,例如 `TimeLine` 组件。 5. 在 `TimeLine` 组件中引入 `react-native-timeline-flatlist` 组件,并使用数据来渲染时间轴。 ```javascript import Timeline from 'react-native-timeline-flatlist'; const data = [ { time: '09:00', title: '快递已揽收', description: '您的快递已经被揽收' }, { time: '12:00', title: '到达深圳', description: '您的快递已经到达深圳' }, { time: '15:00', title: '派送中', description: '您的快递正在派送中' }, { time: '18:00', title: '已签收', description: '您的快递已经被签收' }, ]; const TimeLine = () => { return ( <Timeline data={data} circleSize={20} circleColor="#007aff" lineColor="#007aff" timeContainerStyle={{ minWidth: 52, marginTop: -5 }} timeStyle={{ textAlign: 'center', backgroundColor: '#ff9797', color: 'white', padding: 5, borderRadius: 13 }} descriptionStyle={{ color: 'gray' }} options={{ style: { paddingTop: 5 }, }} /> ); }; export default TimeLine; ``` 6. 在主界面中使用 `TimeLine` 组件,并传递数据来展示时间轴。 ```javascript import React from 'react'; import { View, StyleSheet } from 'react-native'; import TimeLine from './TimeLine'; const App = () => { return ( <View style={styles.container}> <TimeLine /> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', }, }); export default App; ``` 通过以上步骤,我们就可以实现一个简单的天猫物流跟踪时间轴功能。当然,如果你想要更加复杂的效果,可以根据自己的需求对组件进行自定义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值