spa刷新组件而非页面
发表于:2023-10-09 |

前言

最近我在拆分聊天系统组件的时候,因为之前聊天系统就只有一个路由,刷新我就直接使用了window.location.reload,但是当我把它搞成组件在其他项目中引用的时候,就会导致页面刷新,这时候用户体验就很不好,所以我就想到了如何刷新组件而非页面,下面就是我的解决方案。

Vue 中使用 key 属性:

在 Vue 中,你可以使用 key 属性,它会给 VNode 节点一个唯一的标识符。当该组件的 key 值发生变化时,Vue 会销毁该组件并重新渲染它。因此,你可以在需要重新请求数据的组件上添加 key 属性,并在数据发生变化时更新该属性的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
html
<template>
<div :key="componentKey">
<!-- 组件代码 -->
</div>
</template>

<script>
export default {
data() {
return {
componentKey: 0,
};
},
methods: {
refreshComponent() {
// 更新 componentKey,强制重新渲染组件
this.componentKey += 1;
},
},
};
</script>

在上面的例子中,每当 componentKey 的值发生变化时,Vue 会销毁 div 元素,并重新创建它。这将导致组件被重新挂载到 DOM 上,并触发 created 和 mounted 等生命周期钩子函数。通过将 componentKey 的初始值设为 0,我们可以在第一次加载组件时确保它被正确地渲染。

React 中使用 forceUpdate 方法:

在 React 中,你可以使用 forceUpdate 方法,它会强制组件重新渲染,无论状态是否发生变化。你可以在需要重新请求数据的组件中调用它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import React from 'react';

class MyComponent extends React.Component {
refreshComponent() {
// 强制重新渲染组件
this.forceUpdate();
}

render() {
return (
<div>
{/* 组件代码 */}
</div>
);
}
}

在上面的例子中,每当 refreshComponent 方法被调用时,React 会强制重新渲染 MyComponent 组件。由于 forceUpdate 方法不会触发生命周期钩子函数,因此你需要确保在该方法内部正确地处理状态和数据。

结语

本篇文章就分享到这里,更多内容敬请期待

上一篇:
【JAVA学习】02-JDK安装以及环境变量配置
下一篇:
前端导入txt文件并转换为json