React-Native 中关于 useEffect 钩子的完整指南

React-Native 中关于 useEffect 钩子的完整指南

本指南将提供有关 react-native 中 useEffect 挂钩的完整信息。同样的概念也可以应用于反应。

useEffect hook

在 React-Native 应用程序中处理数据是一项非常常见的任务。有时您需要从 API 或数据库中获取数据。借助 React 提供的 useEffect 钩子,您可以轻松完成此任务。

你可能想知道,什么是钩子?

挂钩用于管理 react-native 应用程序中的状态或数据。如果您熟悉类组件生命周期方法,那么钩子是这些生命周期方法的替代品,但为我们提供了更多功能。

Hooks 是让你从函数组件中“钩入”React 状态和生命周期特性的函数。 ~ 反应文档

什么是 useEffect 挂钩?

useEffect 挂钩是在屏幕渲染后运行的函数。因此,您可以获取数据并相应地更新状态。以下是 useEffect 挂钩的基本结构。

 使用效果(()=> { //做一点事 }, []);

useEffect 接收一个回调函数作为第一个参数,一个依赖数组作为第二个参数。您可以在回调函数中编写您想要完成的任务。依赖数组可以以三种方式使用。

1.不提供依赖数组

如果你不提供依赖数组,甚至不写方括号,那么只要屏幕呈现,useEffect 就会运行。

 使用效果(()=> { //获取数据并设置状态 });

不要这样做,因为这是一种不好的方法。在上面的示例中,如果您在 useEffect 中设置状态,那么应用程序将进入无限循环并最终崩溃。让我解释一下。

Infinite Loop

Infinite Loop

如您所知,每当我们设置状态时,应用程序都会重新渲染以更新屏幕上的数据。在上述场景中,当调用 useEffect 时,它会更新状态,更新状态会导致重新渲染屏幕,进而再次调用 useEffect。

2.提供空依赖数组

如果你提供空的依赖数组,那么 useEffect 只会在屏幕初始渲染之后被调用一次。

 使用效果(()=> { //做一些应该只做一次的事情 }, []);

这个用例的一个很好的场景是从数据库中获取用户信息。

3.在依赖数组中提供状态变量

如果您在 useEffect 的依赖数组中提供了一个变量,那么只要该变量的值发生变化,就会调用 useEffect。

 使用效果(()=> { //做一点事 }, [数数]);

只要值为 数数 变化。假设您正在从 API 获取报价。 API 仅返回 25 个引号,但您需要所有引号。在这种情况下,您可以使用依赖数组中的状态变量向 API 发出多个请求。当您使用了所有 25 个引号后,只需更改计数状态,useEffect 将处理其余部分。

笔记: 您可能需要在应用程序中实现其他逻辑以获得正确的功能。

这总结了 useEffect 钩子的基本功能,但还有更多功能。让我们讨论一下 useEffect 钩子的更多细节。

useEffect 清理函数

useEffect 中的回调函数返回另一个称为清理函数的函数。当组件卸载或从屏幕上移除时调用此函数。我们使用这个函数来移除由我们的 useEffect 函数创建的效果。

 使用效果(()=> { //做一点事  
 return () => {//移除效果} }, []);

假设我们有一个计时器组件,并且我们在 useEffect 中使用 setInterval 来启动计时器。

 使用效果(()=> { setInterval(() => { //增加秒数 }, 1000) }, [isStart]);

setInterval 以 1000 毫秒(1 秒)的延迟增加计时器组件中的秒数。但我们这里有一个大问题。我们无法停止这个 setInterval。当我们的用户移动到应用程序的其他部分并且该组件卸载时,计时器将 仍在后台运行 。因此,当我们的组件卸载时,此实现将引入内存泄漏。为了解决这类问题,我们使用清理功能。

 使用效果(()=> { 让区间 = useRef(setInterval(() => { //增加秒数 }, 1000)) 返回 () => { clearInterval(interval.current) } }, [isStart]);

不用担心这里使用了 useRef 钩子,这是另一篇文章的主题。在上面的实现中,我们的代码不会引入内存泄漏,因为它会在组件卸载时清除我们的 useEffect 创建的间隔。这就是关于 useEffect 钩子的全部内容。如果您想了解有关挂钩的更多信息,请查看 React 官方文档。

感谢您阅读本文。我希望现在你对 useEffect 钩子有了一些了解。您的意见和反馈将不胜感激。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/39466/46112611

posted @ 2022-09-26 11:46  哈哈哈来了啊啊啊  阅读(1063)  评论(0编辑  收藏  举报