美文网首页React基础
(四)React请求接口数据

(四)React请求接口数据

作者: 生命里那束光 | 来源:发表于2022-04-19 19:36 被阅读0次

    React请求接口数据

    一、React ajax

    • React本身只关注于界面, 并不包含发送ajax请求的代码,前端应用需要通过ajax请求与后台进行交互(json数据),react应用中需要集成第三方ajax库(或自己封装)

    常用的ajax请求库

    jQuery: 比较重, 如果需要另外引入不建议使用

    axios: 轻量级, 建议使用,封装XmlHttpRequest对象的ajax,promise风格,可以用在浏览器端和node服务器端

    fetch: 原生函数, 但老版本浏览器不支持,不再使用XmlHttpRequest对象提交ajax请求,为了兼容低版本的浏览器, 可以引入兼容库fetch.js

    二、ajax请求库—axios

    相关文档:https://github.com/axios/axios

    相关API

    • GET请求
    //方式1
    axios.get('/user?ID=12345')
        .then(function (response) {
              console.log(response.data);
         })
        .catch(function (error) {
              console.log(error);
         });
    //方式2
    axios.get('/user', {
            params: {
              ID: 12345
            }
         })
         .then(function (response) {
              console.log(response);
         })
         .catch(function (error) {
              console.log(error);
         });
    
    • POST请求
    axios.post('/user', {
             firstName: 'Fred',
             lastName: 'Flintstone'
        })
        .then(function (response) {
             console.log(response);
        })
        .catch(function (error) {
             console.log(error);
        });
    

    三、案例—github用户搜索🔥

    3.1 拆分组件
    • 拆分界面,抽取组件(把一整个静态页面拆分成多个组件)
    3.2 实现静态组件
    • 使用组件实现静态页面效果(拆组件,拆样式)
    3.3 实现动态组件

    难点1:axios 请求接口数据

    难点2:三元组连续判断List状态

    3.4 总结github用户搜索案例

    需要理解的概念有:

    (1)拆分组件时,要拆到位,结构、样式都要拆。
    (2)组件化编码流程:
        1. 拆分组件: 根据功能抽取组件
        2. 实现静态组件: 使用组件实现静态页面效果
        3. 实现动态组件
            3.1 动态显示初始化数据
                3.1.1 数据类型
                3.1.2 数据名称
                3.1.2 保存在哪个组件?
            3.2 交互(从绑定事件监听开始)
            
    (3)设计状态时要考虑全面,例如带有网络请求的组件,要考虑请求失败怎么办。
    (4)ES6小知识点:解构赋值+重命名
            let obj = {a:{b:1}}
            const {a} = obj; //传统解构赋值
            const {a:{b}} = obj; //连续解构赋值
            const {a:{b:value}} = obj; //连续解构赋值+重命名
    

    四、消息订阅-发布机制

    1. 工具库:PubSubJS(组件间传值)
    2. 下载: npm install pubsub-js --save
    3. 文档: https://www.npmjs.com/package/pubsub-js
    4. 使用:
      • import PubSub from ‘pubsub-js’ //引入
      • PubSub.subscribe(‘delete’, function(data){ }); //订阅
      • PubSub.publish(‘delete’, data) //发布消息
    • 订阅消息(接收数据)
    • 发布消息(传递数据)

    五、扩展:Fetch(原生)

    5.1 文档

    1. https://github.github.io/fetch/
    2. https://segmentfault.com/a/1190000003810652

    5.2. 特点

    1. fetch: 原生函数,不再使用XmlHttpRequest对象提交ajax请求
    2. 老版本浏览器可能不支持

    5.3. 相关API

    • GET请求
    fetch(url).then(function(response) { 
         return response.json() 
    }).then(function(data) {   
         console.log(data) 
    }).catch(function(e) {  
         console.log(e) 
    });
    
    • POST请求
    fetch(url, {   
          method: "POST", 
          body: JSON.stringify(data),
    }).then(function(data) { 
          console.log(data) 
    }).catch(function(e) { 
          console.log(e)
    })
    

    拓展:

    关注分离的设计思想:

    1. 是什么

    关注点指软件的功能或目的。把关注点“分离”,就是将与各个关注点有关的代码集中起来做成独立的模块,与其他代码分离。分离的模块要尽量减少公开的功能数量,与其他模块的关联也要维持在最低的限度。

    在设计技法中,有很多模式用于实现关注点分离,其中最具代表性的模式是“模型-视图-控制器”****(MVC。在编程领域,关注点分离的代表技术是面向切面编程。

    2. 为什么

    代码的修改通常以关注点为单位。因此,将代码按照关注点进行分离有一下好处

    • 各个关注点互相独立,从而缩小了代码的修改范围,使得代码更易于修改
    • 修改带来的影响限制在关注点内,因此代码的质量能够保持稳定
    • 因为代码的编写是以关注点为单位进行的,所以能够实现并行开发

    3. 怎么做

    以关注点为单位创建模块,把不同的功能、不相关的功能分开。比如在“模型-视图-控制器”模式下,业务逻辑、用户显示和输入处理互相分离。

    另外,如果一个模块在不同前提下有不同的功能,我们就需要分割该模块,让各个功能独立于状态。一般来讲,一个模块不可以拥有多个功能。

    总结:

    (5)消息订阅与发布机制
            1.先订阅,再发布(理解:有一种隔空对话的感觉)
            2.适用于任意组件间通信
            3.要在组件的componentWillUnmount中取消订阅
    (6)fetch发送请求(关注分离的设计思想)
            try {
                     //把请求到数据马上返回分离:请求结果+数据处理  一个步骤拆成多个步骤:分而治之的逻辑
                    const response= await fetch(`/api1/search/users2?q=${keyWord}`)
                    const data = await response.json()
                    console.log(data);
                } catch (error) {
                    console.log('请求出错',error);
                }
    

    相关文章

      网友评论

        本文标题:(四)React请求接口数据

        本文链接:https://www.haomeiwen.com/subject/wofsertx.html