React中异步数据更新不及时问题及解决

 更新时间:2024年03月22日 15:04:48   作者:裤头青蛙  
这篇文章主要介绍了React中异步数据更新不及时问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

react异步数据更新不及时问题

最近在学习react的过程中,遇到了个问题,当我使用useState这个hook的时候,发现我们这个方法更新数据他是异步更新的,数据不会及时同步上我们的页面,在仔细的研究下,找到了以下

解决方法

const [value,setValue] = useState([]);
const changeValue = ()=>{
    setValue(data)
    console.log(value) //在此处输出会出现不及时更新问题,不会同步到页面上
}
 
//利用useEffect这个hook来监听数据的变化再去输出或者是调用
useEffect(()=>{
    console.log(value)//这样就可以解决更新不及时的问题啦
},[value])

react异步更新、寻找DOM

1.react异步更新

react异步更新指的是this.setState()是异步更新的,异步更新之后怎么获取更新之后值

有两种方法:

1.1 componentDidUpdate生命周期函数获取更新之后的值

componentDidUpdate:已经更新生命周期函数中打印state中的数据是更新后的值

  componentDidUpdate(prevProps, prevState) {
        console.log(2, prevState.name, this.state.name)  // 张三, 李四
  }

1.2 在this.setState()的回调函数中获取更新后的值

this.setState的第二个参数是可选的回调,是异步更新完成时的回调,在该回调函数中获取更新后的值

this.setState({
                 name: "李四"
                }, ()=>{
// this.setState的第二个参数是可选的回调, 是异步更新完成时的回调 (与小程序setData相同)
                 console.log(3, this.state.name)  // 李四
                // 注意: this.setState数据更新属于异步更新, 此处打印是更新前的值 
                console.log(1, this.state.name)  // 张三

2.react查找DOM

在react组件中获取DOM元素的三种方式:

2.1 给标签设置ref属性

给标签设置ref属性,通过this.refs调用(老版本语法,将要废除)

<h1 ref="myH1"></h1>
this.refs.myH1

2.2 在构造器中创建ref全局变量

在构造器中创建ref全局变量,在标签中ref属性动态绑定这个全局变量,通过全局变量的current字段调用

      constructor(props) {
        super(props);
        this.d2 = React.createRef()
      }

<div ref={this.d2}>2</div>
 console.log(this.d2.current);

2.3 在标签ref属性绑定函数

在标签ref属性绑定函数,在函数中定义全局变量赋值,通过全局变量调用

    <h3 ref={ ele => this.myH3 = ele }></h3>
    this.myH3

注意:

1.在父组件中用ref获取子组件对象,必须保证子组件是类组件,函数式组件获取结果是undefined

2.父组件中子组件标签绑定ref属性,父组件使用ref获取子组件对象后,可以对子组件状态数据和函数执行调用和修改

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。

相关文章

  • React-Route6实现keep-alive效果

    React-Route6实现keep-alive效果

    本文主要介绍了React-Route6实现keep-alive效果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2022-06-06
  • 详解如何构建自己的react hooks

    详解如何构建自己的react hooks

    我们组的前端妹子在组内分享时谈到了 react 的钩子,趁此机会我也对我所理解的内容进行下总结,方便更多的同学了解。在 React 的 v16.8.0 版本里添加了 hooks 的这种新的 API,我们非常有必要了解下他的使用方法,并能够结合我们的业务编写几个自定义的 hooks。
    2021-05-05
  • React?less?实现纵横柱状图示例详解

    React?less?实现纵横柱状图示例详解

    这篇文章主要介绍了React?less?实现纵横柱状图示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 详解三种方式在React中解决绑定this的作用域问题并传参

    详解三种方式在React中解决绑定this的作用域问题并传参

    这篇文章主要介绍了详解三种方式在React中解决绑定this的作用域问题并传参,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • react-native ListView下拉刷新上拉加载实现代码

    react-native ListView下拉刷新上拉加载实现代码

    本篇文章主要介绍了react-native ListView下拉刷新上拉加载实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Reactjs?错误边界优雅处理方法demo

    Reactjs?错误边界优雅处理方法demo

    这篇文章主要为大家介绍了Reactjs?错误边界优雅处理方法demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 详解react-router如何实现按需加载

    详解react-router如何实现按需加载

    本篇文章主要介绍了react-router如何实现按需加载,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • React实现组件全屏化的操作方法

    React实现组件全屏化的操作方法

    开发今天给我提了一个sql编辑器输入框比较小,不支持放大,不太方便,下面看下我的处理方法,本文基于React+antd,给大家演示一个完整的全屏demo,感兴趣的朋友一起看看吧
    2021-10-10
  • React实现Vue的watch监听属性方式

    React实现Vue的watch监听属性方式

    这篇文章主要介绍了React实现Vue的watch监听属性方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • React + webpack 环境配置的方法步骤

    React + webpack 环境配置的方法步骤

    本篇文章主要介绍了React + webpack 环境配置的方法步骤,详解的介绍了开发环境的配置搭建,有兴趣的可以了解一下
    2017-09-09

最新评论

?


http://www.vxiaotou.com