如何强制刷新react hooks组件

 更新时间:2023年11月14日 17:22:37   作者:衣乌安、  
这篇文章主要介绍了如何强制刷新react hooks组件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

强制刷新react hooks组件

首先要知道react组件在什么情况下会刷新,比如:state、props、context更新。。。。

然后就有各种方式可以强行刷新组件了,比如:

const [refresh, setRefresh] = useState(false);
 
useEffect(() => {
    refresh && setTimeout(() => setRefresh(false))
}, [refresh])
 
const doRefresh = () => setRefresh(true)

react组件刷新问题(函数组件)

我们使用React进行开发的时候,有可能会出现已经执行了setState()的方法更新过state了,但是为什么组件还是未刷新呢?

这里就会有一个概念:地址。类似C,Java这种后端语言一样。

如果我们的state是一个复杂对象的话(数组,对象)。我们的变量存储的是state的地址而不是值。

const [object,setObject] = useState({id:'1',name:'张三'})

就像上面这段代码,object这个state存储的是{id:'1',name:'张三'}这个对象在内存中的地址,而不是值本身。

那么这个概念和react刷新的机制有什么关系呢?

因为React的useState()这个hook的刷新机制是根据state存储的值是否发生改变而进行刷新的。

const cloneObject = object
cloneObject.name = '李四'
setObject(cloneObject)
setObject((preObj)=>{
    preObj.name = '李四'
    return preObj
})

以上两种setState的方式都不会触发组件的刷新,正如我们上面提到的概念,object存储的地址,虽然我们改变了object里的一个属性的值,但object本身存储的还是地址,并没有发生变化,所以是不会触发组件更新的。

那么怎么解决呢,根据上面的概念,很容易的就能想到只需要改变state的地址就行了。

也就是新创建一个对象来覆盖原来的对象,这样它的地址自然和以前的不一样。

那么怎么创建一个新的对象呢?

const cloneObject = JSON.parse(JSON.stringify(object))
cloneObject.name = '李四'
setObject(cloneObject)

JSON.stringify方法的作用是将传入的参数转化为json字符串类型的数据。

JSON.parse方法的作用是将传入的参数转化为json对象类型的数据。

这样就能生成一个新的对象,这下地址就改变了。

const cloneObject = {...object,name:'李四'}
setObject(cloneObject)

这个是利用的ES6的解构语法,其实和下面的方法一样。只是用起来更加简洁。

本质上都是手动创建一个值一样的新对象,不过下面的方法不可取,这里只是帮大家理解上面的方法,大家开发中用上面的写法进行开发。

const cloneObject = {id:'1',name:'张三'}
cloneObject.name = '李四'
setObject(cloneObject)

总结

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

相关文章

  • 一文带你搞懂React的函数组件

    一文带你搞懂React的函数组件

    React中函数式组件的基本意义是,组件实际上是一个函数,不是类,下面就来给大家介绍一下关于React中函数组件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • React Router 用法详细介绍

    React Router 用法详细介绍

    React Router 是 React 中用于处理页面导航和路由的工具,它使用 HTML5 History API 或 URL 的哈希部分进行路由管理,本文介绍React Router 用法详细讲解,感兴趣的朋友一起看看吧
    2025-01-01
  • 详解React开发必不可少的eslint配置

    详解React开发必不可少的eslint配置

    本篇文章主要介绍了详解React开发必不可少的eslint配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • React模仿网易云音乐实现一个音乐项目详解流程

    React模仿网易云音乐实现一个音乐项目详解流程

    这篇文章主要介绍了React模仿网易云音乐实现一个音乐项目的详细流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 浅谈React之状态(State)

    浅谈React之状态(State)

    这篇文章主要介绍了浅谈React之状态(State),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • React实现翻页时钟的代码示例

    React实现翻页时钟的代码示例

    本文给大家介绍了React实现翻页时钟的代码示例,翻页时钟把数字分为上下两部分,翻页效果的实现需要通过设置 position 把所有的数组放在同一个位置叠加起来,文中有详细的代码讲解,需要的朋友可以参考下
    2023-08-08
  • react调试和测试代码的小技巧

    react调试和测试代码的小技巧

    在开发React应用时,严格模式StrictMode可以帮助开发者捕捉到组件中的错误和潜在问题,安装React Developer Tools浏览器扩展检查组件的props和状态,直接修改以及分析性能,@testing-library/react和Cypress或Playwright等工具可以有效地测试React组件和执行端到端测试
    2024-10-10
  • 简析React Native startReactApplication 方法

    简析React Native startReactApplication 方法

    这篇文章主要介绍了React Native startReactApplication 方法简析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 详解React项目中碰到的IE问题

    详解React项目中碰到的IE问题

    这篇文章主要介绍了React项目中碰到的IE问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • React Native 的动态列表方案探索详解

    React Native 的动态列表方案探索详解

    这篇文章主要为大家介绍了React Native 的动态列表方案探索示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论