前言
最近我在拆分聊天系统组件的时候,因为之前聊天系统就只有一个路由,刷新我就直接使用了window.location.reload,但是当我把它搞成组件在其他项目中引用的时候,就会导致页面刷新,这时候用户体验就很不好,所以我就想到了如何刷新组件而非页面,下面就是我的解决方案。
Vue 中使用 key 属性:
在 Vue 中,你可以使用 key 属性,它会给 VNode 节点一个唯一的标识符。当该组件的 key 值发生变化时,Vue 会销毁该组件并重新渲染它。因此,你可以在需要重新请求数据的组件上添加 key 属性,并在数据发生变化时更新该属性的值。
1 | html |
在上面的例子中,每当 componentKey 的值发生变化时,Vue 会销毁 div 元素,并重新创建它。这将导致组件被重新挂载到 DOM 上,并触发 created 和 mounted 等生命周期钩子函数。通过将 componentKey 的初始值设为 0,我们可以在第一次加载组件时确保它被正确地渲染。
React 中使用 forceUpdate 方法:
在 React 中,你可以使用 forceUpdate 方法,它会强制组件重新渲染,无论状态是否发生变化。你可以在需要重新请求数据的组件中调用它。
1 | import React from 'react'; |
在上面的例子中,每当 refreshComponent 方法被调用时,React 会强制重新渲染 MyComponent 组件。由于 forceUpdate 方法不会触发生命周期钩子函数,因此你需要确保在该方法内部正确地处理状态和数据。
结语
本篇文章就分享到这里,更多内容敬请期待