返回顶部
首页 > 资讯 > 精选 >hooks写React组件要注意哪些细节
  • 310
分享到

hooks写React组件要注意哪些细节

2023-07-05 11:07:24 310人浏览 薄情痞子
摘要

今天小编给大家分享一下hooks写React组件要注意哪些细节的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。01.不需要re

今天小编给大家分享一下hooks写React组件要注意哪些细节的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

01.不需要render的场景下使用useState

在函数组件中我们可以使用useState来管理状态,这使得对状态的管理变得很简单,但是也容易被滥用,我们通过下面的代码样例看下容易忽略的地方。

不推荐×

function ClickButton(props){  const [count, setCount] = useState(0)  const onClickCount = () => {    setCount((c) => c + 1)  }  const onClickRequest = () => {    apiCall(count)  }  return (    <div>      <button onClick={onClickCount}>Click</button>      <button onClick={onClickRequest}>Submit</button>    </div>  )}

问题所在:仔细看上面的代码,乍一看其实也没什么问题,点击按钮更新 count。但是问题也就出在这里,我们的 return 部分并没有用到 count 状态,而每次 setCount 都会使组件重新渲染一次,而这个渲染并不是我们需要的,多出来的渲染会使得页面的性能变差,因此我们可以改造一下代码,如下代码:

推荐&radic;如果我们只是单纯的想要一个能在组件声明周期内保存的变量,但是变量的更新不需要组件的重新渲染,我们可以使用 useRef 钩子。

function ClickButton(props){  const count = useRef(0)  const onClickCount = () => {    count.current++  }  const onClickRequest = () => {    apiCall(count.current)  }  return (    <div>      <button onClick={onClickCount}>Click</button>      <button onClick={onClickRequest}>Submit</button>    </div>  )}

02.使用了router.push而非link

在React SPA应用中,我们用react-router来处理路由的跳转,我们很经常在组件中写了一个按钮,通过点击按钮的事件来处理路由的跳转,如下代码:

不推荐&times;

function ClickButton(props){  const history = useHistory()  const onClickGo = () => {    history.push('/where-page')  }  return <button onClick={onClickGo}>Go to where</button>}

问题所在:尽管上述代码可以正常工作,但是却不符合Accessibility(易访问性设计)的要求,此类按钮并不会被屏幕阅读器当作一个可以跳转的链接。因此我们可以改造一下代码,如下代码:

推荐&radic;

function ClickButton(props){  return <Link to="/next-page">    <span>Go to where</span>  </Link>}

03.通过useEffect来处理actions

有时候,我们只想在 React 更新 DOM 之后运行一些额外的代码。比如发送网络请求,手动变更 DOM,记录日志

不推荐&times;

function DataList({ onSuccess }) {  const [loading, setLoading] = useState(false);  const [error, setError] = useState(null);  const [data, setData] = useState(null);  const fetchData = () => {    setLoading(true);    callApi()      .then((res) => setData(res))      .catch((err) => setError(err))      .finally(() => setLoading(false));  };  useEffect(() => {    fetchData();  }, []);  useEffect(() => {    if (!loading && !error && data) {      onSuccess();    }  }, [loading, error, data, onSuccess]);  return <div>Data: {data}</div>;}

问题所在:上面的代码使用了两个useEffect ,第一个用来请求异步数据,第二个用来调用回调函数。在第一个异步请求数据成功,才会触发第二个 useEffect 的执行,但是,我们并不能完全保证,第二个 useEffect 的依赖项完全受控于第一个 useEffect 的成功请求数据。因此我们可以改造一下代码,如下代码:

推荐&radic;

function DataList({ onSuccess }) {  const [loading, setLoading] = useState(false);  const [error, setError] = useState(null);  const [data, setData] = useState(null);  const fetchData = () => {    setLoading(true);    callApi()      .then((res) => {        setData(res)        onSuccess()       })      .catch((err) => setError(err))      .finally(() => setLoading(false));  };  useEffect(() => {    fetchData();  }, []);  return <div>Data: {data}</div>;}

04.单一职责组件

什么时候该把一个组件分成几个更小的组件?如何构建组件树?在使用基于组件的框架时,所有这些问题每天都会出现。然而,设计组件时的一个常见错误是将两个用例组合成一个组件。

不推荐&times;

function Header({ menuItems }) {  return (    <header>      <HeaderInner menuItems={menuItems} />    </header>  );}function HeaderInner({ menuItems }) {  return isMobile() ? <BurgerButton menuItems={menuItems} /> : <Tabs tabData={menuItems} />;}

问题所在:上面的代码通过这种方法,组件HeaderInner试图同时成为两个不同的东西,一次做不止一件事情并不是很理想。此外,它还使得在其他地方测试或重用组件变得更加困难。因此我们可以改造一下代码,如下代码:

推荐&radic;

将条件提升一级,可以更容易地看到组件的用途,并且它们只有一个职责,即<Tabs/><BurgerButton/>,而不是试图同时成为两个不同的东西。

function Header(props) {  return (    &lt;header&gt;      {isMobile() ? &lt;BurgerButton menuItems={menuItems} /&gt; : &lt;Tabs tabData={menuItems} /&gt;}    &lt;/header&gt;  )}

05.单一职责useEffects

通过对比componentWillReceivePropscomponentDidUpdate方法,才认识到userEffect的美丽。但是没有妥当使用useEffect也是容易出问题的。

不推荐&times;

function Example(props) {  const location = useLocation();  const fetchData = () => {      };  const updateBreadcrumbs = () => {      };  useEffect(() => {    fetchData();    updateBreadcrumbs();  }, [location.pathname]);  return (    <div>      <BreadCrumbs />    </div>  );}

问题所在:上面的useEffect同时触发了两个副作用,但是并不都是我们需要的副作用,因此我们可以改造一下代码,如下代码:

推荐&radic;将两个副作用从一个useEffect中分离出来。

function Example(props) {  const location = useLocation();  const fetchData = () => {      };  const updateBreadcrumbs = () => {      };  useEffect(() => {    updateBreadcrumbs();  }, [location.pathname]);  useEffect(()=>{    fetchData();  },[])  return (    <div>      <BreadCrumbs />    </div>  );}

以上就是“hooks写React组件要注意哪些细节”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: hooks写React组件要注意哪些细节

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

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

猜你喜欢
  • hooks写React组件要注意哪些细节
    今天小编给大家分享一下hooks写React组件要注意哪些细节的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。01.不需要re...
    99+
    2023-07-05
  • hooks写React组件的5个注意细节详解
    目录正文01.不需要render的场景下使用useState02.使用了router.push而非link03.通过useEffect来处理actions04.单一职责组件05.单一...
    99+
    2023-03-13
    hooks写React组件 React hooks
  • 使用hooks写React组件需要注意的5个地方
    目录01.不需要render的场景下使用useState 02.使用了router.push而非link 03.通过useEffect来处理actions 04.单一职责组件 05....
    99+
    2024-04-02
  • Html使用要注意哪些细节
    这篇文章主要介绍了 Html使用要注意哪些细节的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇 Html使用要注意哪些细节文章都会有所收获,下面我们一起来看看吧。html技巧1....
    99+
    2024-04-02
  • web开发中使用组件要注意的细节点有哪些
    小编给大家分享一下web开发中使用组件要注意的细节点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!<!DOCTYPE...
    99+
    2024-04-02
  • 服务器托管要注意哪些细节
    服务器托管要注意:1、注意服务器托管的尺寸,按自身需求选择合适的托管机房;2、注意托管服务中包括哪些费用,包括机位费、带宽费、电费、日常维护等费用;3、注意机房的环境,机房的环境会影响服务器的运行情况;4、注意机房出口带宽和剩余带宽,选择合...
    99+
    2024-04-02
  • Javascript中需要注意的细节有哪些
    这篇文章主要介绍了Javascript中需要注意的细节有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.使用 === 代替 ==Jav...
    99+
    2024-04-02
  • 优化网站需要注意哪些细节
    这篇文章将为大家详细讲解有关优化网站需要注意哪些细节,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  在网站搭建初期就完成所有便于优化的框架和内容能够缩短整个网站优化时间,一个完整的便于优化的网站包含:满...
    99+
    2023-06-10
  • 个人注册域名需要注意哪些细节
    个人注册域名需要注意以下几点细节:如果是做博客,域名选择跟产品服务相关的简短域名,方便用户记忆。域名统一格式,用英文字母就只用英文字母,不要与数字混合,避免出现杂乱感。选择优质域名服务商,能够确保域名出问题时,第一时间解决问题。必需提供真实...
    99+
    2024-04-02
  • Go API 文件编程算法需要注意哪些细节?
    Go语言是一种非常流行的编程语言,它的简洁性和高效性使得它成为了许多开发者的首选语言。在Go语言中,API文件编程算法是一种非常常见的编程方式,可以帮助开发者轻松地构建高效、可靠的API。然而,在实现API文件编程算法时,需要注意一些细节,...
    99+
    2023-06-24
    api 文件 编程算法
  • Motorola J2ME开发时需要注意哪些细节
    这期内容当中小编将会给大家带来有关Motorola J2ME开发时需要注意哪些细节,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在实际开发MOTO的产品的时候,会遇到一些...
    99+
    2024-04-02
  • 服务器托管需要注意哪些细节
    这篇文章主要讲解了“服务器托管需要注意哪些细节”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“服务器托管需要注意哪些细节”吧!服务器托管要注意哪些细节首先,大家都知道选择服务器机房位置的不同,...
    99+
    2023-06-07
  • 租用香港云主机要注意哪些细节
    租用香港云主机要注意的细节:1. 选择优质的香港云主机商, 提供优质运维服务 确保数据的安全。2. 做好定期的备份和安全扫描,降低服务器被入侵的风险。3. 搭建网站后要进行密码设置和端口设置,做好防火墙设置。具体内容如下:选择优质的香港云主...
    99+
    2024-04-02
  • Web测试中需要注意的细节有哪些
    这篇文章主要介绍了Web测试中需要注意的细节有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Web测试中需要注意的细节有哪些文章都会有所收获,下面我们一起来看看吧。页面显示部分(1)首先关注页面是否能显示完...
    99+
    2023-06-05
  • 网站优化需要注意的细节有哪些
    这篇文章主要介绍“网站优化需要注意的细节有哪些”,在日常操作中,相信很多人在网站优化需要注意的细节有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”网站优化需要注意的细节有哪些”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-13
  • PHP 数组array你需要注意的细节
    php之所以能有今天之成就,很大一部分原因在于其强大的字符串和数组的处理功能。尤其是对数组的处理,php更是提供了大量的函数来供我们使用。然而,也往往因为这些功能强大且全面的内置函数使我们忽略了数组的那...
    99+
    2024-02-27
  • 网站建设时需要注意哪些优化细节
    这期内容当中小编将会给大家带来有关网站建设时需要注意哪些优化细节,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、制定合理的title标签:对于搜索引擎而言,在分析网页结构时对于title标签的重要性是不...
    99+
    2023-06-07
  • 使用香港服务器IP需要注意哪些细节
    使用香港服务器IP需要注意的细节有:1、香港服务器IP会影响网站优化;2、香港服务器可以广播世界各地的IP;3、使用香港服务器IP会被攻击,需要对其进行保护;4、IP会被屏蔽,如果服务器的IP被屏蔽,则会对网站带来很大影响。具体内容如下:I...
    99+
    2024-04-02
  • 新网站建设前需要注意的细节有哪些
    本篇内容介绍了“新网站建设前需要注意的细节有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!    ...
    99+
    2023-06-10
  • 上海cn2云服务器托管要注意哪些细节
    上海cn2云服务器托管要注意的细节有:1、应用程序本身是否故障,是否能充分利用和发挥云服务器弹性环境的优势;2、根据具体的网站需求对...
    99+
    2023-02-08
    上海cn2云服务器 上海云服务器 云服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作