梗概

  • 组件尽量不要使用经常频繁变动且不涉及自己的props

原理

在 Vue 之中,一个子组件只会在其至少一个 props 改变时才会更新。

实例

思考以下示例:

<ListItem
  v-for="item in list"
  :id="item.id"
  :active-id="activeId" />
  • activeId是指选中某一个ID 在 <ListItem> 组件中,它使用了 id 和 activeId 两个 props 来确定它是否是当前活跃的那一项。虽然这是可行的,但问题是每当 activeId 更新时,列表中的每一个 <ListItem> 都会跟着更新! 理想情况下,只有活跃状态发生改变的项才应该更新。我们可以将活跃状态比对的逻辑移入父组件来实现这一点,然后让 <ListItem> 改为接收一个 active prop:
<ListItem
  v-for="item in list"
  :id="item.id"
  :active="item.id === activeId" />

现在,对于大多数的组件来说,activeId 改变时,它们的 active prop 都会保持不变,因此它们无需再更新。总结一下,这个技巧的核心思想就是让传给子组件的 props 尽量保持稳定。