返回顶部
首页 > 资讯 > 精选 >React如何使用useEffect解决setState副作用
  • 383
分享到

React如何使用useEffect解决setState副作用

2023-07-04 11:07:13 383人浏览 独家记忆
摘要

本篇内容主要讲解“React如何使用useEffect解决setState副作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React如何使用useEffect解决setState副作用”吧!

本篇内容主要讲解“React如何使用useEffect解决setState副作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React如何使用useEffect解决setState副作用”吧!

fetch()方法访问api

我们会用到一个很简单的资源API,https://swapi.dev/api/people/1,这是一个会返回星球大战里的人物信息的API。

所以我们要做的事:1、读取API中提供的数据; 2、将获得的数据写入state。

首先我们来做第一步,这里介绍一下fetch()

fetch() 必须接受一个参数——资源的路径。无论请求成功与否,它都返回一个 Promise 对象,resolve 对应请求的Response。

一旦 Response被返回,就可以使用一些方法来定义内容的形式

所以我们可以使用以下代码完成资源API的读取,并且渲染到页面上

import React from "react"export default function App() {    const [starWarsData, setStarWarsData] = React.useState({})    fetch("Https://swapi.dev/api/people/1")        .then(res => res.JSON())        .then(data => setStarWarsData(data))    return (        <div>            <pre>{jsON.stringify(starWarsData, null, 2)}</pre>        </div>    )}

可以看到我们似乎确实轻松地获得了资源接口所提供给我们的数据

React如何使用useEffect解决setState副作用

然而当我们加上控制台的输出后,事情就变得不一样了

setState的副作用

在这个程序中,我们可以加上一句console.log在控制台输出后天的运行情况,如下

import React from "react"export default function App() {    const [starWarsData, setStarWarsData] = React.useState({})    console.log("component rendered")    fetch("https://swapi.dev/api/people/1")        .then(res => res.json())        .then(data => setStarWarsData(data))    return (        <div>            <pre>{JSON.stringify(starWarsData, null, 2)}</pre>        </div>    )}

这时再运行就能清楚地看到在控制台处显示了这个组件在一直不断地生成,重新地render

React如何使用useEffect解决setState副作用

我们可以简单地分析一下原因,

  • 组件每次render都会触发一次fetch,

  • 然后fetch获取的数据传入setState又会重新使得组件被render一遍,

而这就形成了一个死循环,致使组件不断地生成。

使用useEffect解决这个问题

useEffect()出现之前,react并没有setState后停止render的方法,这就使得setState的使用需要非常谨慎,不过如今提供了useEffet()来解决这个问题

useEffect接受两个参数,其中第二个参数是可选的

useEffect(<function>, <dependency array>)

所以让我们先来尝试一下不使用第二个参数会得到什么结果

import React from "react"export default function App() {    const [starWarsData, setStarWarsData] = React.useState({})    console.log("component rendered")    React.useEffect(function(){        fetch("https://swapi.dev/api/people/1")            .then(res => res.json())            .then(data => setStarWarsData(data))    })    return (        <div>            <pre>{JSON.stringify(starWarsData, null, 2)}</pre>        </div>    )}

可以看到在上面的代码里我们已经按照语法要求使用了useEffect(),然而结果却不如我们所设想的只打印一条语句,依旧是一个死循环

React如何使用useEffect解决setState副作用

原因在于只使用一个参数的useEffect()的效果是在组件被挂载被更新两种情况下执行参数的函数,所以并不能解决更新状态不执行的效果

那么就要用到第二个参数了,第二个参数叫做dependency array,只有在这个数组里的元素更新了,才会触发这个useEffect

所以这里我们可以将第二个参数设置为一个空数组,这样只有在组件刚刚被挂载的时候才会执行useEffect,很好的解决了我们只需要读取一遍API的任务要求

import React from "react"export default function App() {    const [starWarsData, setStarWarsData] = React.useState({})    console.log("component rendered")    React.useEffect(function(){        fetch("https://swapi.dev/api/people/1")            .then(res => res.json())            .then(data => setStarWarsData(data))    }, [])    return (        <div>            <pre>{JSON.stringify(starWarsData, null, 2)}</pre>        </div>    )}

使用useEffect操控函数运行

dependency array我们也可以得出另一种用法,可以看以下代码

import React from "react"export default function App() {    const [count, setCount] = React.useState(0)    console.log("Component rendered")    React.useEffect(() => {        console.log("Effect function ran")    }, [count])    return (        <div>            <h3>The count is {count}</h3>            <button onClick={() => setCount(prevCount => prevCount + 1)}>Add</button>        </div>    )}

我们在第二个参数处填入了会随着我们点击而变化的count,所以在我们每次点击使得count增加以后,count state发生变化,执行useEffect第一个参数的函数

可以看到设置了count state,再在useEffect中设置countdependency,这样每次改变count的值就会再一次执行useEffect中的函数。

到此,相信大家对“React如何使用useEffect解决setState副作用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: React如何使用useEffect解决setState副作用

本文链接: https://lsjlt.com/news/344702.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • React如何使用useEffect解决setState副作用
    本篇内容主要讲解“React如何使用useEffect解决setState副作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React如何使用useEffect解决setState副作用”吧!...
    99+
    2023-07-04
  • React使用useEffect解决setState副作用详解
    目录介绍一下APIfetch()方法访问APIsetState的副作用使用useEffect解决这个问题使用useEffect操控函数运行介绍一下API 本文主要内容:描述了setS...
    99+
    2022-11-13
    React useEffect解决setState React useEffect setState
  • setState如何在react 中使用
    setState如何在react 中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。setState是同步还是异步自定义合成事件和react钩子函数中异步更新state以...
    99+
    2023-06-14
  • React Context与setState如何使用
    这篇文章主要介绍“React Context与setState如何使用”,在日常操作中,相信很多人在React Context与setState如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-04
  • React中useEffect使用问题怎么解决
    本篇内容介绍了“React中useEffect使用问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言最近看了一下 ant-des...
    99+
    2023-07-02
  • React useEffect的理解与使用
    目录避免重复循环渲染 关于副作用的清除 React16.8新增的useEffec这个hook函数就是处理副作用的。 所谓的“副作用”,举个通俗一点的例子,假如感冒了本来吃点药就没事了...
    99+
    2024-04-02
  • React中setState使用原理解析
    目录setState使用详解使用setState的原因setState的基本用法setState的异步更新setState获取异步结果setState一定是异步setState使用详...
    99+
    2022-11-13
    React setState使用 React setState
  • React组件中的state和setState如何使用
    本篇内容主要讲解“React组件中的state和setState如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React组件中的state和setState如何使用”吧!state的基本...
    99+
    2023-06-29
  • React中setState如何使用与如何同步异步
    这篇文章主要介绍“React中setState如何使用与如何同步异步”,在日常操作中,相信很多人在React中setState如何使用与如何同步异步问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React中s...
    99+
    2023-06-14
  • React之useEffect依赖引用类型问题怎么解决
    本文小编为大家详细介绍“React之useEffect依赖引用类型问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“React之useEffect依赖引用类型问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-05
  • React中的setState使用细节和原理解析(最新推荐)
    目录setState使用详解使用setState的原因setState的基本用法setState的异步更新setState获取异步结果setState使用详解 前面我们有使用过set...
    99+
    2022-12-19
    React中setState使用原理 React中setState使用
  • react如何使用react-bootstrap
    这篇文章主要介绍了react如何使用react-bootstrap,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。react入门之搭配环境(一...
    99+
    2024-04-02
  • react如何在React html中使用
    本篇文章为大家展示了react如何在React html中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。基本使用<!DOCTYPE html><html l...
    99+
    2023-06-14
  • 如何使用react-redux
    本文小编为大家详细介绍“如何使用react-redux”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用react-redux”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2024-04-02
  • React Context如何使用
    今天小编给大家分享一下React Context如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.Cont...
    99+
    2023-07-05
  • React Hooks如何使用
    这篇文章主要介绍了React Hooks如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React Hooks如何使用文章都会有所收获,下面我们一起来看看吧。hooks介绍在react...
    99+
    2023-07-05
  • 如何解析CSS网页布局的意义与副作用
    如何解析CSS网页布局的意义与副作用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。和大家重点讨论一下CSS网页布局的意义与副作用,如今大部...
    99+
    2024-04-02
  • 如何使用IOC解耦React组件
    小编给大家分享一下如何使用IOC解耦React组件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!IOC(控制反转)是一种编程思想...
    99+
    2024-04-02
  • React使用redux基础操作详解
    目录一,什么是redux二,安装redux谷歌调试工具三,操作store 改变四,写redux的小技巧一,什么是redux Redux是一个用来管理管理数据状态和UI状态的JavaS...
    99+
    2023-01-13
    React使用redux React redux
  • react中less不起作用怎么解决
    今天小编给大家分享一下react中less不起作用怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作