项目场景:
Vue 路由配置:使用props属性配置数据,传递给路由组件
问题描述:
props属性是一函数,每次【模板包含router-view标签的组件】视图更新,也会触发props;而不只是路由改变,触发props
原因分析:
编写demo,发现依旧存在该问题,怀疑是本身特性
解决方案:
在【模板包含router-view标签的组件】上不做任何导致视图更新的数据变化,将会导致视图更新的部分移到一个子组件中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 该模板包含<router-view></router-view>,视图更新,将触发路由配置属性props -->
<div id="app">
<aoo></aoo>
<!-- 路由出口 -->
<!-- 路由匹配到的组件将渲染在这里 -->
<router-view></router-view>
</div>
<script src="assets/vue.js"></script>
<script src="assets/vue-router.js"></script>
<script>
// 1. 定义 (路由) 组件。
const Foo = {
template: '<div>foo{{id}}</div>',
props: ['id'],
mounted: function () {
console.log(this.id)
}
}
// 2. 定义路由
const routes = [{
path: '/foo/:id',
component: Foo,
beforeEnter: (to, from, next) => {
console.log(to, from);
next();
},
props: function (route) {
console.log(222)
return {
id: route.params.id
};
}
}]
// 3. 创建 router 实例,然后传 `routes` 配置
const router = new VueRouter({
routes // (缩写) 相当于 routes: routes
})
// 4. 创建和挂载根实例
const app = new Vue({
router,
components: { // 将<h1>Hello App!{{title}}</h1>放到一个子组件中
Aoo: {
template: '<h1>Hello App!{{title}}</h1>',
data: function () {
return {
title: ''
}
},
mounted: function () {
setTimeout(() => {
this.title = "test";
}, 2000);
}
}
}
}).$mount('#app')
</script>
</body>
</html>
在Vue项目中,使用路由props传递数据时遇到一个问题:当【模板包含router-view标签的组件】视图更新时,props函数会被多次触发。经过分析,这似乎是Vue的正常行为。为解决这个问题,建议将可能导致视图更新的数据操作移至子组件中,从而避免不必要的props调用。
1279

被折叠的 条评论
为什么被折叠?



