在组件根元素上使用 `v-once`,并在 `items` 变化时手动强制更新组件。
使用 `watch` 监听 `items` prop,当它变化时通过修改一个本地的 `ref` 来触发模板更新。
在渲染列表的循环外层容器上使用 `v-memo="[items]"`。
使用 `computed` 属性返回 `items`,并在模板中渲染这个 `computed` 属性。
<div v-memo="[a, b]"> <!-- 只有 a 或 b 变化时才重新渲染 --> </div>
<ul>
<li
v-for="item in list"
:key="item.id"
v-memo="[item.selected, item.name]"
>
<span>{{ item.name }}</span>
<input v-model="item.value" />
<span :class="{ active: item.selected }">选中</span>
</li>
</ul> ▎ 每次只有 selected 或 name 变化的 <li> 才会重新渲染,其余直接跳过。<!-- 正确 --> <div v-for="item in list" :key="item.id" v-memo="[item.id, item.done]"> <!-- 错误:key 和 memo 分离 --> <template v-for="item in list" :key="item.id"> <div v-memo="[item.done]"> <!-- 不要这样写 -->
<div v-memo="[]">
<!-- 只渲染一次,之后永远不更新 -->
{{ staticContent }}
</div>