https://ssr.vuejs.org/zh/guid...
const matched = router.getMatchedComponents(to)
const prevMatched=router.getMatchedComponents(from)
let diffed = false
const activated = matched.filter((c, i) => {
return diffed || (diffed = (prevMatched[i] !== c))
})
这段方法中:
- 组件可以用
!==
来判断吗? - 找到符合的组件,然后之后的就都不判断了吗?
问题1 不行 按我的理解。这边在对比两个列表,activated的值是两个列表对比后 保留第一个不相同的值以及后面的所有值。
问题2 这段代码的逻辑的后续逻辑是都不判断了。不太明白这样的含义。直接使用!==只是简单的比对了地址。要是react的话 还有可能说对比成本高 迁移成本高。通过简化一些逻辑降低双节点树转换函数算法n ** 3 至 n。一个可能的原因是所有组件是严格按照顺序获取。如果发现列表中某个组件存在变更,这个组件及后续组件必须重新渲染。