memo,useCallback(),strapi,fetch,数据加载的提示,处理错误,await

React组件会在两种情况下发生重新渲染。

第一种,当组件自身的state发生变化时。

第二种,当组件的父组件重新渲染时。第一种情况下的重新渲染无可厚非,state都变了,组件自然应该重新进行渲染。但是第二种情况似乎并不是总那么的必要。

react.memo用来对组件进行组件(只对函数式组件有用)

是一个高阶函数(参数或者返回值是函数就称为高阶函数)

它接收另一个组件作为参数,并且会返回一个包装过的新组件。包装过的新组件就会具有缓存功能,包装过后,只有组件的props发生变化化。才会触发组件的重新的渲染,否则总是返回缓存中结集

export default React.memo(B);

如果b中props的值没有发生变化,当父组件渲染时子组件n就不会发生渲染


useCallback()

useCallback()创建的回调函数不会总在组件重新渲染时创建。

直接把需要的函数放在useCallback()里面就行,两个参数,第一个是回调函数,第二个是依赖数组,如果不加依赖数组就代表每次都会重新创建,如果是空数组则代表只有在初始化的时候才发生渲染

依赖项里面一定要将函数里面需要的变量都放进去,不然可能会发生问题!!!!!!!!!将回调函数中的所有变量都设置到依赖数组中,除了setState

在这里插入图片描述

如果不把num放进去的话,会导致我i们每次加的都是1,如果把num放进去每次是递增增加的1,2,3,4,5,6


工具strapi:它可以帮助我们快速的搭建起一个供我们使用的api服务器,就是一个api管理系统

在这里插入图片描述

server是自己取的名字


Fetch API

Fetch是浏览器中自带的一种发送请求的方式,它是Ajax的升级版,相较于Ajax来说它使用起来更加方便,代码也更加简洁清晰。

将写死的数据替换为从接口 http: //localhost:1337/api/students中加载的数据

组件初始化的时候就要发送请求向服务器发送请求来加载数据,依赖项是[]就只会在初始化的时候渲染一次。

res.json()的返回值也是一个promise,所以我们要把我们要将这个东西返回,应该写return res.json(),这个promise会在转化成功后调用, 然后再then,在第二个then处理数据

在这里插入图片描述

在这里插入图片描述


数据加载的提示

1.设置一个变量来控制加载
在这里插入图片描述

2.加载入口设置为正在加载
在这里插入图片描述

3.加载结束后我们的将loading设置为false
在这里插入图片描述

4.这里我们如果我们的loading为true我们就显示数据正在加载中,如果为false就显示我们加载完成后的数据
在这里插入图片描述


数据出错处理:

虽然404,但是我们还是会一直向下处理,所以我们需要判断是不是正常的响应信息

在这里插入图片描述

catch里面还需要设置一个错误状态,所以我们还需要一个state,用来记录我们的错误信息。

在这里插入图片描述

这里我们抛出异常后
在这里插入图片描述
会跳转到.catch()函数,并且错误信息会以第一个参数的形式传递给catch,只要catch一执行说明我们上诉代码出错了,出错了怎么办?都在catch里面处理

在这里插入图片描述

然后我们在最后就能做一个判断了,如果出错了我们就不会出现数据

只有加载完成并且数据没有出错才会继续显示
在这里插入图片描述

有错的话就会显示数据加载异常这个东西


另一种写法await,省略了.then的方法

在这里插入图片描述
这样做会报错:

在这里插入图片描述

为什么会报错,原因await只支持在异步函数中去调用。为什么只支持在异步函数中调用呢?

以同步的形式去调用异步的函数,实际上还是异步的,必须要确保我们的函数是异步的。加上async保证是异步函数

在这里插入图片描述

但是还是会报错,因为useEffect里面不支持传异步函数,只支持传同步函数
在这里插入图片描述
多定义一层普通函数然后普通函数调自己的函数

最终版本

在这里插入图片描述
setError(‘‘null’’)不能少,又一次重新加载的话我们不知道有没有错,为防止上一次错误信息对我们本次的影响,这句话必须加上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值