keep-alive는 포함된 구성요소가 상태를 유지하거나 재렌더링을 방지할 수 있도록 하는 Vue의 내장 구성요소입니다. 이 글에서는 Vue가 지정한 컴포넌트 캐시를 주로 소개합니다.
keep-alive 소개
keep-alive는 포함된 컴포넌트의 상태를 유지하거나 유지하도록 하는 Vue의 내장 컴포넌트입니다. 다시 렌더링하지 마세요.
사용법도 매우 간단합니다.
<keep-alive> <component> <!-- 该组件将被缓存! --> </component> </keep-alive>
props
include - 문자열 또는 정규 표현식, 일치하는 구성 요소만 캐시됩니다.
exclude - 문자열 또는 정규 표현식, 일치하는 구성 요소는 캐시되지 않습니다. 캐시됨
// 组件 a export default { name: 'a', data () { return {} } } <keep-alive include="a"> <component> <!-- name 为 a 的组件将被缓存! --> </component> </keep-alive>可以保留它的状态或避免重新渲染 <keep-alive exclude="a"> <component> <!-- 除了 name 为 a 的组件都将被缓存! --> </component> </keep-alive>可以保留它的状态或避免重新渲染 <keep-alive include="test-keep-alive"> <!-- 将缓存name为test-keep-alive的组件 --> <component></component> </keep-alive> <keep-alive include="a,b"> <!-- 将缓存name为a或者b的组件,结合动态组件使用 --> <component :is="view"></component> </keep-alive> <!-- 使用正则表达式,需使用v-bind --> <keep-alive :include="/a|b/"> <component :is="view"></component> </keep-alive> <!-- 动态判断 --> <keep-alive :include="includedComponents"> <router-view></router-view> </keep-alive> <keep-alive exclude="test-keep-alive"> <!-- 将不缓存name为test-keep-alive的组件 --> <component></component> </keep-alive>
vue-router를 만나보세요
router-view도 연결 유지에 직접 패키지된 경우 경로와 일치하는 모든 뷰 구성 요소가 캐시됩니다.
<keep-alive> <router-view> <!-- 所有路径匹配到的视图组件都会被缓存! --> </router-view> </keep-alive>
그러나 제품은 항상 요구 사항을 변경해야 하며 아무것도 이를 막을 수 없습니다...
Question
라우터 뷰의 특정 구성 요소만 캐시되도록 하려면 어떻게 해야 합니까?
include/exclude 사용
router.meta 속성 추가
include/exclude 사용
// 组件 a export default { name: 'a', data () { return {} } } <keep-alive include="a"> <router-view> <!-- 只有路径匹配到的视图 a 组件会被缓存! --> </router-view> </keep-alive>
exclude 예도 비슷합니다.
단점: 컴포넌트의 이름을 알아야 하며, 프로젝트가 복잡한 경우에는 좋은 선택이 아닙니다.
router.meta 속성을 추가하세요
// routes 配置 export default [ { path: '/', name: 'home', component: Home, meta: { keepAlive: true // 需要被缓存 } }, { path: '/:id', name: 'edit', component: Edit, meta: { keepAlive: false // 不需要被缓存 } } ] <keep-alive> <router-view v-if="$route.meta.keepAlive"> <!-- 这里是会被缓存的视图组件,比如 Home! --> </router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"> <!-- 这里是不被缓存的视图组件,比如 Edit! --> </router-view>
장점: 필요한 컴포넌트의 이름을 열거할 필요가 없습니다. 캐싱됨
【솔트 추가 】router.meta를 사용하여 확장
A, B, C의 3가지 경로가 있다고 가정합니다.
요구 사항:
기본적으로 A 표시
B는 A로 점프, A는 새로 고치지 않음
C는 A로 점프, A는 새로 고침
구현 방법
A 경로에 메타 속성 설정:
{ path: '/', name: 'A', component: A, meta: { keepAlive: true // 需要被缓存 } }
in B 구성요소 Set beforeRouteLeave:
export default { data() { return {}; }, methods: {}, beforeRouteLeave(to, from, next) { // 设置下一个路由的 meta to.meta.keepAlive = true; // 让 A 缓存,即不刷新 next(); } };
Set beforeRouteLeave:
export default { data() { return {}; }, methods: {}, beforeRouteLeave(to, from, next) { // 设置下一个路由的 meta to.meta.keepAlive = false; // 让 A 不缓存,即刷新 next(); } };
이런 식으로 B가 A로 돌아올 때 A는 새로 고쳐지지 않습니다. 새로 고침됩니다.
위 내용은 제가 여러분을 위해 정리한 내용입니다. 앞으로 도움이 되길 바랍니다.
관련 기사:
Blod를 기반으로 한 Ajax 진행률 표시줄 다운로드 구현 샘플 코드
Promise를 사용하여 여러 비동기 Ajax 요청으로 인한 코드 중첩 문제 해결
위 내용은 vue 지정된 구성 요소 캐시 인스턴스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!