React Suspense前后端IO异步操作处理

发布时间:2024-12-19 10:01

目录
  • 简单介绍Suspense
  • Suspense主要用法和场景
    • 一. React18之前的做法
    • 二. React18之后
  • Suspense配合前端表格组件处理前后端IO异步操作

    简单介绍Suspense

    Suspense主要用来解决网络IO问题,它早在2018年的React 16.6.0版本中就已发布。它的相关用法有些已经比较成熟,有的相对不太稳定,甚至经历了重命名、删除:

    • 在render函数中,我们可以写入一个异步请求,请求数据
    • react会从我们缓存中读取这个缓存
    • 如果有缓存了,直接进行正常的render
    • 如果没有缓存,那么会抛出一个异常,这个异常是一个promise
    • 当这个promise完成后(请求数据完成),react会继续回到原来的render中(实际上是重新执行一遍render),把数据render出来
    • 完全同步写法,没有任何异步callback之类的东西

    如果你还没有明白这是什么意思那我简单的表述成下面这句话:

    调用render函数->发现有异步请求->悬停,等待异步请求结果->再渲染展示数据

    看着是非常神奇的,用同步方法写异步,而且没有yield/async/await,简直能把人看傻眼了。这么做的好处自然就是,我们的思维逻辑非常的简单,清楚,没有callback,没有其他任何玩意,不能不说,看似优雅了非常多而且牛逼。

    Suspense主要用法和场景

    在前端开发中,经常会有这样的需求,加载某个界面时,如果界面的资源比较大,前端对数据的处理也需要时间,加载比较慢,这时候我们需要用一个加载动画或者提示,使得交互更加友好。

    一. React18之前的做法

    在React18之前,我们要实现上面这个效果,请求数据或者加载新的组件的时机一般在componentDidMount,在State中需要一个flag变量来记录请求数据的状态,后续手动更改这个状态,非常的不方便。代码如下:

    class App extends Component {
      state = {
    isLoading: false,
      }
      componentDidMount() {
        this.setState({
          data: null,
    isLoading: true,
        });
        axios.get(\'/api/getData\').then((data) => {
          this.setState({
            data,
    isLoading: false,
          });
        });
      }
      render() {
        return this.state.loading ? \'正在加载中...\' : (
          
        );
      }
    }
    

    二. React18之后

    1.React.lazy

    React.lazy() 允许你定义一个动态加载的组件。这有助于缩减 bundle 的体积,并延迟加载在初次渲染时未用到的组件

    const SomeComponent = React.lazy(() => import(\'./SomeComponent\'));

    渲染 lazy 组件依赖该组件渲染树上层的 <React.Suspense> 组件。这是指定加载指示器(loading indicator)的方式。

    2.React.Suspense

    React.Suspense 可以指定加载指示器(loading indicator),以防其组件树中的某些子组件尚未具备渲染条件:

    // 该组件是动态加载的
    const OtherComponent = React.lazy(() => import(\'./OtherComponent\'));
    function MyComponent() {
      return (
        // 显示  组件直至 OtherComponent 加载完成
        }>
          
    ); }

    Suspense配合前端表格组件处理前后端IO异步操作

    因为没有后端逻辑,前端表格组件主要用于在前端对 Excel、Grid 表格数据在线编辑和展示,而利用Suspense的技术特点,便可以轻松实现前后端IO异步操作:

    const PureSpread = React.lazy(() => import(\'./components/pureSpread\'))
    const SpreadDesigner = React.lazy(() => import(\'./components/designer\'))
    const {Content,Header} = Layout
    const App = () => (
      
         
         
            
              
                  
                    loading...
    }> )

    看一下效果:

    \"React

    本文Demo下载

    了解更多在线demo:https://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html

    以上就是React Suspense前后端IO异步操作处理的详细内容,更多关于React Suspense前后端IO异步的资料请关注脚本之家其它相关文章!

    相关推荐

    密码学系列之:在线证书状态协议OCSP详解

    Pycharm中SQL语句提示SQL Dialect is Not Configured的解决

    【DeeplabV3+】DeeplabV3+网络结构详解

    【自动驾驶模拟器AirSim快速入门 | 01】自动驾驶模拟器AirSim实战演练

    【必须收藏】华为配置命令手册大全

    Java常用类详解

    JS基础语句(throw try-catch-finally)

    I2C协议靠这16张图彻底搞懂(超详细)

    R语言怎么获取内置数据集

    设计模式——访问者模式

    C++学习笔记(B站黑马程序员C++教程)

    SpringCloud使用集中配置组件Config规避信息泄露

    关于 Angular 应用 Module 的 forRoot 方法的讨论

    有一群200w年薪的朋友是什么感觉?谈一谈入学中国科学院大学的几点感受吧

    使用CPLEX求解小规模能量高效的FJSP

    白帽黑客与网络安全工程师教你Kali Linux:使用Metasploit进行SSH服务扫描

    还摆个屁的烂?用Python画如此漂亮的专业插图 ?简直So easy!

    python外星人入侵游戏代码_Python游戏:外星人入侵游戏编程完整版!内附代码

    php去掉json反斜杠的实例讲解

    Electron 插件开发实践

    ItVuer - 免责声明 - 关于我们 - 联系我们

    本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

    桂ICP备16001015号