05-React渲染数据案例

2023-11-15

React渲染数据案例—蓝铅笔课程分页展示

一、思路

  1. 获取第三方接口,由于会跨域,所以需要安装浏览器的扩展(为了不搭建后端服务器)
  2. 向接口发起请求,拿到数据
  3. 将数据渲染到页面中

二、相关知识点

1.async—await:

  • async/await是Promise的语法糖,
  • 他能实现的效果都可以用then链来实现,就是说,它是为了优化then链而开发出来的,
  • 从字面上来看 async是"异步"的简写,await 译为等待,所以可以理解 由 async声明的function是异步的,await等待某个操作完成。
  • 在语法上强制规定,await只能出现在async函数中。

2.相比较原生DOM 使用React 在循环渲染页面之前不需要将盒子内部清空

3.在使用React JSX渲染的顶级元素中,不可以写入其他的标签

4.JSX中规定: JSX模板必须有一个跟标签包裹,最外层不能有并列标签的存在

5.在JSX 中注释使用:“{/**/}”

6.JSX 绑定事件:区别于html规范(οnclick=“prevBtn”),React 里面使用onClick绑定事件,事件名称不能使用字符串“prevBtn”,需要使用{prevBtn}

7.ReactDOM.render() 这个方法会将盒子里面之前的内容全部清空后,再渲染页面

8.arr.map() 在JSX中用来循环遍历数组中的元素

三、代码示例

1.引入React和babel

<script src="https://unpkg.com/react@18.1/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18.1/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>

2.HTML 代码

这个html 代码里面不要出现其他的元素,出现了也会被清空

<div id="main"></div>

3.JS代码

3.1 设置类型,使得JSX代码被识别

 <script type="text/babel"></script>

3.2 详细代码

(1)、封装一个函数,用来发请求,考虑到这个案例是get请求,所以参数中只写了url

async function ajaxAsync(url) {
      let data = await fetch(url).then((response) => {
          return response.json();
        });
        return data;
      }

(2)、调用函数发起请求,拿到数据。但是考虑到分页,所以再次封装一个函数,用来后面分页时调用

function ajaxTool(page) {
    ajaxAsync(`https://www.lanqb.com/api/course/video/indexv3?type=2&page=${page}&limit=20`).then(({ data }) => {
          renderDOM(data);
        });
      }

(3)、在页面开始时,需要先调用这个函数,用来发出请求,并显示第一页数据

 ajaxTool(1);

(4)渲染DOM

React v17的写法

function renderDOM(datas) {
        let ul = (
          <div>
            <button id="prev" onClick={prevBtn}>
              上一页
            </button>
            <button id="next" onClick={nextBtn}>
              下一页
            </button>
            <ul>
              {datas.map((obj) => (
                <li>
                  <h4>课程名称:{obj.title}</h4>
                  <p>
                    <span>学习人数:{obj.study_num}</span>
                    <span>
                      关键字:{obj.tags.map((tag) => tag.label.label_name + ";")}
                    </span>
                  </p>
                  <p>作者:{obj.profile.nickname}</p>
                </li>
              ))}
            </ul>
          </div>
        );
         ReactDOM.render(ul, document.getElementById("main"));
      }

React v18的写法,使用V18之前要确认在头部引用的React 是18版本的

头部引用

<script src="https://unpkg.com/react@18.1.0/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@18.1.0/umd/react-dom.development.js"></script>

渲染DOM

let root = ReactDOM.createRoot(document.getElementById("main"));//这行代码写在JS的最上方

      // 渲染DOM的部分
      function renderDOM(datas) {
        // JSX中规定:JSX模板必须有一个根标签包裹,最外层不能有并列的标签存在。
        let ul = (
          <div>
            <button id="prev" onClick={prevBtn}>
              上一页
            </button>
            <button id="next" onClick={nextBtn}>
              下一页
            </button>
            <ul>
              {datas.map((obj) => (
                <li>
                  <h4>课程名称:{obj.title}</h4>
                  <p>
                    <span>学习人数:{obj.study_num}</span>
                    <span>
                      关键字:{obj.tags.map((tag) => tag.label.label_name + ";")}
                    </span>
                  </p>
                  <p>作者:{obj.profile.nickname}</p>
                </li>
              ))}
            </ul>
          </div>
        );
        
        // let root = ReactDOM.createRoot(document.getElementById("main"));
         root.render(ul);
      }

(5)写入分页函数

let curPage = 1;
      function prevBtn() {
        console.log("上一页");
        curPage -= 1;
        ajaxTool(curPage);
      }
      function nextBtn() {
        console.log("下一页");
        curPage += 1;
        ajaxTool(curPage);
      }

4.注意事项

(1).在使用React 18 版本时, 如果将 下面这行代码写在了renderDOM() 函数的内部,会有警告如下图

let root = ReactDOM.createRoot(document.getElementById("main"));

在这里插入图片描述

警告解析:

ReactDOM.createRoot()在重复渲染新的JSX时,只需要createRoot一次即可,不需要每次渲染都去createRoot。只需调用render即可

解决办法:

将这行创建DOM的代码写在JS 外部,可以写在整个JS 的最上面,保证这个createRoot()方法值调用一次。

(2).关于行内的onclick 事件的绑定,不能使用html规范下的绑定事件的方法(如下代码),在JSX中,若是使用了html规范下的绑定方法,会有警告如下图

<button id="prev" onClick="prevBtn">

在这里插入图片描述

警告解析:

在JSX中事件绑定的方法是以{} 包裹的,因此显示无法绑定

**解决办法:**将代码修改成如下所示

<button id="prev" onClick={prevBtn}>

【注】:一定要注意,在JSX中onclick的时间绑定时,要写成 onClick 这是JSX的语法规范

四、结果展示

分页展示
在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

05-React渲染数据案例 的相关文章

随机推荐

  • 错误隐藏学习手记(五)

    在H 264的研究中 我们可以看到目前有三种开源编码 很多测试都是在一个开源编码中实现的 这个开源编码就叫做 JM86 在这里呢具体介绍一下这三种开源编码 一 三大开源编码器介绍 1 JM H 264的官方测试源码 由德国hhi研究所负责开
  • oracle提高数据移植速度.

    author skatetime 2008 07 21 提高数据移植速度 序列也能影响数据迁移的速度 1 测试表 test skate1 SQL gt select count from test skate1 COUNT 5841920
  • python-kafka多线程快速读取consumer消费者数据,同时使用批读取与无限流读取改进

    python单线程循环读取consumer会很浪费时间 而且速率远远低于生产者可容纳的速率 因此我们使用多线程来处理IO密集型的读取操作 文章目录 极简的示例 1 生产者 先运行 2 消费者部分多线程读取 消费者改进 1 批次读取 并将读取
  • StringBuilder详解

    1 简介 StringBuilder和StringBuffer一样 都是继承自抽象类AbstractStringBuilder类 也是一个可变的字符序列 StringBuilder和StringBuffer非常相似 甚至有互相兼容的API
  • 【蜂群课堂】懒人精灵PP-PicoDet课程

    一 目标检测介绍 PP PicoDet 是百度提出的移动端友好和高精度Anchor Free 目标检测算法 实测性能非常优越 优点 识别速度更快 轻量级模型 更适合移动端设备运行 cpu占用低 更能稳定运行 可以断点恢复训练 缺点 训练数据
  • Qt在windows与Mac OS中获取执行程序版本号

    1 windows中获取执行文件exe的版本号 QString GetFileVertion QString aFullName QString vRetVersion string vFullName QStringToString aF
  • Java对象和类

    Java对象和类 Java是一种面向对象的编程语言 通过使用类和对象来组织和管理代码 在本教程中 我们将探讨Java中对象和类的使用 以及如何创建和使用它们 步骤1 创建一个类 Java中的类是对象的模板 用于定义对象的属性和行为 我们首先
  • 解决There is no getter for property named ‘orgld‘ in ‘class java.lang.Long“问题

    问题描述 添加一个根据orgId返回信息时候 后端报There is no getter for property named orgld in class java lang Long 的错误 解决问题 最后发现出错地方在Mapper层
  • 还在用android.support?该考虑迁移AndroidX了!

    AndroidX是Google 2018 IO 大会推出的新扩展库 主要是对Android 支持库做了重大改进 与支持库一样 AndroidX 与 Android 操作系统分开提供 并与各个 Android 版本向后兼容 可以说Androi
  • 更改cpuID(CPU序列号)指南

    最近在使用一个软件 购买了许可 该license绑定了机器的cpuID 然该软件并不能正在运行在windows 8 64bit操作系统上 具体表现为运行3 5mins后就崩溃 于是 我计划使用VMware虚拟机虚拟出相应的硬件以及windo
  • 教程资源合集(网上搜集整理)

    Adobe After Effects AE 实用学习教程合集 AE零基础入门教程 100讲 http t cn RICjTnQ AE cc 教程全集http t cn Rb3G6dp AK大神AE系列教程合集http t cn RZVtd
  • [Springboot]Whitelabel Error Page This application has no explicit mapping for /error, so you are s

    这个问题无非就两个原因 1 url拼错了 2 启动类ConponetScan配置的包路径不对 或者注解写错了 同组里一个新同事遇到这个问题了 在这里记录下 问题很小 但是也很荒唐
  • 字符串匹配算法

    一 简介 文本信息可以说是迄今为止最主要的一种信息交换手段 而作为文本处理中的一个重要领域 字符串匹配 就是我们今天要说的话题 原文还特意提及文本数据数量每18个月翻一番 以此论证算法必须要是高效的 不过我注意到摩尔定律也是18个月翻番 这
  • 解决 vscode 窗口故障(先别和我一样傻着想去重装vs code,来试试这个方法叭 )

    参考 https blog csdn net nanhuaibeian article details 105020102 问题描述 警告如下 因为问题解决前忘记截图了 所以在别处找的图 此处为2020 5 12 补充 当出现该问题时 先在
  • 服务器系统安装net,.Net Framework的安装教程

    Net Framework是微软的一个系统组件 基本所有windows平台上开发的产品都需要安装Net Framework 除了winxp这种老系统 所有的window系统都自带 Net Framework 如果您的服务器是win2008
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • jupyter风格设置,以及解决matplotlib坐标轴看不清的问题

    分享一下我的主题 效果图 直接在jupyter打开一个终端输入以下命令 jt t onedork f roboto nf robotosans tf robotosans cellw 70 dfs 10 ofs 10 fs 14 nfs 1
  • 4G模块的使用

    一 G相关知识 4G是第四代通讯技术 能够传输高质量视频图像 4G的下载速度达100Mbps 比目前的拨号上网快2000倍 上传的速度也能达到20Mbps 并能够满足几乎所有用户对于无线服务的要求 此外 4G可以在DSL和有线电视调制解调器
  • CSS中position中的各个属性

    static position中默认元素 没有定位 出现在正常的流中 relative 相对定位 可以利用left right top bottom来给元素定位 所以变成相对定位 absolute 绝对定位 是相对于除了static以外的第
  • 05-React渲染数据案例

    React渲染数据案例 蓝铅笔课程分页展示 一 思路 获取第三方接口 由于会跨域 所以需要安装浏览器的扩展 为了不搭建后端服务器 向接口发起请求 拿到数据 将数据渲染到页面中 二 相关知识点 1 async await async awai