广告
返回顶部
首页 > 资讯 > 精选 >使用react框架需要注意哪些事项
  • 891
分享到

使用react框架需要注意哪些事项

2023-06-05 03:06:08 891人浏览 独家记忆
摘要

本篇内容主要讲解“使用React框架需要注意哪些事项”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用react框架需要注意哪些事项”吧!1.setState到底是同步的还是异步的?class&

本篇内容主要讲解“使用React框架需要注意哪些事项”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用react框架需要注意哪些事项”吧!

1.setState到底是同步的还是异步的?

class MyComponent extends React.Component{ constructor(props) {  super(props)  this.state ={  value:0  } }handleClick = () => {  this.setState({value:1})   console.log('在handleClick里输出' + this.state.value);}render(){   console.log('在render()里输出' + this.state.value);return (<div>   <button onClick ={this.handleClick}>按钮</button>  </div>)  }}export default MyComponent//省略渲染过程,下面也一样

在这里我们点击按钮时,调用handleClick函数,首先调用this.setState()设置value,随即把this.state.value输出,结果是什么?

你可能会想,这还不简单——“在handleClick里输出1”呗,然而你错了,它的结果为:

使用react框架需要注意哪些事项

事实上,setState()的调用是异步的,这意味着,虽然你调用了setState({value:0}),但this.state.value并不会马上变成0,而是直到render()函数调用时,setState()才真正被执行。结合图说明一下:

使用react框架需要注意哪些事项

你可能又会问了:要是我在render()前多次调用this.setState()改变同一个值呢?(比如value)

我们对handleClick做一些修改,让它变得复杂一点,在调用handleClick的时候,依次调用handleStateChange1 ,handleStateChange2,handleStateChange3,它们会调用setState分别设置value为1,2,3并且随即打印

handleStateChange1 = () => {  this.setState({value:1})  console.log('在handleClick里输出' + this.state.value);}handleStateChange2 = () => {  this.setState({value:2})  console.log('在handleClick里输出' + this.state.value);}handleStateChange3 = () => {  this.setState({value:3})  console.log('在handleClick里输出' + this.state.value);}handleClick = () => {  this.handleStateChange1();  this.handleStateChange2();  this.handleStateChange3();}

那么输出结果会是什么呢?如果setState是同步调用的,那么结果显然为

在handleClick里输出1

在handleClick里输出2

在handleClick里输出3

但是结果为:,证明它是异步的

使用react框架需要注意哪些事项

这下好理解了吧,配合这幅图:

使用react框架需要注意哪些事项

2.如何在子组件中改变父组件的state呢?

这是我们经常会遇到的问题之一,解决办法是:在父组件中写一个能改变父组件state的方法,并通过props传入子组件中

class Son extends React.Component{ render(){  return(<div onClick = {this.props.handleClick}>    {this.props.value}    </div>)   }}class Father extends React.Component{ constructor(props){   super(props)   this.state ={    value:'a'    }  } handleClick = () => {   this.setState({value:'b'})  } render(){   return (<div style ={{margin:50}}>      <Son value = {this.state.value} handleClick = {this.handleClick}/>     </div>)   }}

点击子组件Son,内容由a变成b,说明父组件的state被修改了

使用react框架需要注意哪些事项

使用react框架需要注意哪些事项

3.context的运用,避免“props传递地狱”

3.1假设一个比较极端的场景:你需要从你的子组件里调用父父父父父组件的属性或方法,怎么办!当组件嵌套层级过深的时候,不断地传props作为实现方式简直就是噩梦!我称之为“props传递地狱”(这个词是我瞎编的,参考自“回调函数地狱”)

我们接下来实现的是这样一个需求,把gene属性(基因)从组件GrandFather -->Father --> Son传递,如果用props传递:

class Son extends React.Component{ render(){  return (<h4 style ={{marginTop:30}}>我从我的爷爷那里得到了基因--{this.props.gene}</h4>)  } }class Father extends React.Component{ render(){  return (<Son gene = {this.props.gene}/>) }}class GrandFather extends React.Component{ constructor(props) {  super(props)  this.state ={  gene:'[爷爷的基因]'  } } render(){  return (<Father gene = {this.state.gene}/>) }}

demo:

使用react框架需要注意哪些事项

实现是实现了,但你想想,假设不是从“爷爷”组件,而是从“太太太太爷爷”组件传下来,这多可怕!不过没关系,react提供了一个叫做context(上下文)的api,你在顶层组件的context中定义的属性,可以在所有的后代组件中,通过this.context.属性去引用!让我们一睹为快:

class Son extends React.Component{ render(){  console.log(this.context.color);  return (<h4 style ={{marginTop:30}}>我从我的爷爷那里得到了基因--{this.context.gene}</h4>)  }}Son.contextTypes ={  gene:React.PropTypes.string}class Father extends React.Component{ render(){  return (<Son/>)  }}class GrandFather extends React.Component{ getChildContext(){  return {gene:'[爷爷的基因]'} } render(){  return (<Father />) }}GrandFather.childContextTypes = {  gene: React.PropTypes.string};export default GrandFather

demo效果同上!这个时候你发现,我们在<GrandFather>组件和<Father>组件中都没有向下传递props,我们就从最下层的Son组件中获取了gene属性,是不是很方便!

解释下代码:

getChildContext()是你在顶层组件中定义的钩子函数,这个函数返回一个对象——你希望在后代组件中取用的属性就放在这个对象中,譬如这个例子中我希望在Son组件中通过this.context.gene取属性,所以在getChildContext()中返回{gene:'[爷爷的基因]'}

GrandFather.childContextTypes和Son.contextTypes 用于规定顶层组件和取顶层组件context的后代组件的属性类型

【注意】GrandFather.childContextTypes和Son.contextTypes 这两个对象必须要规定!否则context只能取到空对象!

有图有真相之context和props的区别

使用react框架需要注意哪些事项

3.2context是否推荐使用?

虽然上面这个例子说明了context多么好用,但注意:官方并不推荐经常使用它,因为它会让你的应用架构变得不稳定(官方文档原话If you want your application to be stable, don't use context),在我看来,为什么在大多数情况下要使用props而不是实现数据流呢,因为props凭借组件和组件间严密的逻辑联系,使得你能够清晰地跟踪应用的数据流(it's easy to track the flow of data through your React components with props)当然了,如果你遇到上述的例子的情况,context还是大有裨益的

3.3需要改变context中的属性时候,不要直接改变它,而是使用this.state作为媒介,如果你试图在顶层组件的state中放入一个可变的属性你可以这样做:

getChildContext(){  return {type:this.state.type}}

3.4在上述我限制gene的类型时候我是这样写的:gene: React.PropTypes.string,使用了React内置的React.PropTypes帮助属性,此时我的版本为 "react": "15.4.2",在15.5的版本后这一帮助属性被废弃,推荐使用props-types库,像这样:

const PropTypes = require("Prop-Types");GrandFather.childContextTypes = {  gene: PropTypes.string};

当然,在这之前你需要npm install prop-types

4.组件类里有私有变量a,它到底改放在this.a中还是this.state对象中(作为属性a)呢?

这得根据它是否需要实时的重渲染决定,如果该变量需要同步到变化的UI中,你应该把它放在this.state对象中,如果不需要的话,则把它放在this中(无代码无demo)

到此,相信大家对“使用react框架需要注意哪些事项”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 使用react框架需要注意哪些事项

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用react框架需要注意哪些事项
    本篇内容主要讲解“使用react框架需要注意哪些事项”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用react框架需要注意哪些事项”吧!1.setState到底是同步的还是异步的?class&...
    99+
    2023-06-05
  • React中需要注意的事项有哪些
    小编给大家分享一下React中需要注意的事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、容器性组件(containe...
    99+
    2022-10-19
  • 使用react框架需要注意什么
    这篇文章主要为大家展示了“使用react框架需要注意什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“使用react框架需要注意什么”这篇文章吧。这篇文章主要是...
    99+
    2022-10-19
  • win7换win10需要注意哪些事项
    本篇内容主要讲解“win7换win10需要注意哪些事项”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win7换win10需要注意哪些事项”吧!win7换win10需要注意的事项一、BIOS的设置...
    99+
    2023-06-30
  • 新网站需要注意哪些事项
    这篇文章主要讲解了“新网站需要注意哪些事项”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“新网站需要注意哪些事项”吧!  第一、网站上内容不足  新上线网站大多都是只有几个或者几十个新做的网页...
    99+
    2023-06-10
  • 网页布局需要注意哪些事项
    这篇文章主要介绍“网页布局需要注意哪些事项”,在日常操作中,相信很多人在网页布局需要注意哪些事项问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”网页布局需要注意哪些事项”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-10
  • 制作网站需要注意哪些事项
    这篇文章将为大家详细讲解有关制作网站需要注意哪些事项,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。第一,尽量使用文字而不是flash、图片、javascript等来显示重要的内容和链接。Aj...
    99+
    2023-06-12
  • 买服务器需要注意哪些事项
    1. 确定需求:在购买服务器之前,需要先确定自己的需求,包括服务器的规模、性能、存储容量、网络带宽等方面。2. 选择合适的规格:根据...
    99+
    2023-06-13
    买服务器 服务器
  • 写shell脚本需要注意哪些事项
    今天小编给大家分享一下写shell脚本需要注意哪些事项的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 指定bashshe...
    99+
    2023-06-27
  • 网站建设需要注意哪些事项
    小编给大家分享一下网站建设需要注意哪些事项,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、网站风格风格(style)是抽象的。是指站点的整体形象给浏览者的综合感受。整体形象包括站点的版面布局,色彩,字体,浏览方式等。每一...
    99+
    2023-06-07
  • 网站改版需要注意哪些事项
    小编给大家分享一下网站改版需要注意哪些事项,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!  一、企业网站为什么要改版  为什么要改版解答了这个问题,也就解答了是不是要改版。这个问题老渔哥玩网络觉得归总起来可以分三个层面: ...
    99+
    2023-06-10
  • 在python中使用lxml时需要注意哪些事项
    这篇文章将为大家详细讲解有关在python中使用lxml时需要注意哪些事项,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python主要应用领域有哪些1、云计算,典型应用OpenStack。...
    99+
    2023-06-14
  • 在python中使用yield时需要注意哪些事项
    在python中使用yield时需要注意哪些事项?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比...
    99+
    2023-06-14
  • 在java中使用static是需要注意哪些事项
    在java中使用static是需要注意哪些事项?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数...
    99+
    2023-06-14
  • 在java中使用final时需要注意哪些事项
    在java中使用final时需要注意哪些事项?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表...
    99+
    2023-06-14
  • 在Java8中使用Stream时需要注意哪些事项
    在Java8中使用Stream时需要注意哪些事项?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Stream简介Stream是元素的集合,这点让Stream看起来用些类似It...
    99+
    2023-05-30
    java8 stream
  • 使用Java构造器时需要注意哪些事项
    今天就跟大家聊聊有关使用Java构造器时需要注意哪些事项,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java构造器使用方法及注意事项超类的构造器在子类的构造器运行之前运行,也就是说...
    99+
    2023-05-31
    java ava
  • 使用javaweb要注意哪些事项
    1. 确保正确配置和部署Java开发环境,包括安装JDK、配置环境变量等。2. 选择适合的Java Web框架,如Spring MV...
    99+
    2023-09-21
    javaweb
  • 使用averageifs要注意哪些事项
    使用averageifs函数时,需要注意以下几点事项:1. 函数语法:averageifs函数的语法为averageifs(aver...
    99+
    2023-09-07
    averageifs
  • 使用jpa要注意哪些事项
    使用JPA时需要注意以下事项:1. 实体类的注解:使用@Entity注解标记实体类,使用@Id标记实体类中的主键字段,使用@Colu...
    99+
    2023-09-12
    jpa
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作