鍍金池/ 問(wèn)答/HTML/ 公共的組件,在多個(gè)頁(yè)面中被引用,項(xiàng)目啟動(dòng)后會(huì)發(fā)出重復(fù)的多次請(qǐng)求

公共的組件,在多個(gè)頁(yè)面中被引用,項(xiàng)目啟動(dòng)后會(huì)發(fā)出重復(fù)的多次請(qǐng)求

公共的組件,在多個(gè)頁(yè)面中被引用,項(xiàng)目啟動(dòng)后會(huì)發(fā)出重復(fù)的多次請(qǐng)求,也會(huì)mounted很多次,怎么解決這個(gè)問(wèn)題?

回答
編輯回答
傲寒

不推薦把請(qǐng)求放在公共組件里,如果硬要放,你可以:

  1. 緩存,設(shè)置適當(dāng)時(shí)間的有效期
  2. 在組件里限制請(qǐng)求的頻率或次數(shù)
  3. 給請(qǐng)求設(shè)置些前置條件
2018年1月8日 17:53
編輯回答
擱淺

因?yàn)槲业淖龇ㄊ墙M件內(nèi)部自己管理數(shù)據(jù)的,可能會(huì)通過(guò)prop和其他組件交互,但是組件內(nèi)做請(qǐng)求在我這邊是可行的。
也就是數(shù)據(jù)請(qǐng)求還是放在組件里面,而我還沒(méi)遇到你的問(wèn)題。
我想,主要的問(wèn)題在于

mounted很多次

一般而言,router中是這樣配置的:


const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }

const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

這個(gè)時(shí)候,加載的是一個(gè)component,所引用的組件應(yīng)當(dāng)mounted吧。
但是如果使用的是命名視圖:

const router = new VueRouter({
  routes: [
    {
      path: '/',
      components: {
        default: Foo,
        a: Bar,
        b: Baz
      }
    }
  ]
})

這時(shí),同一個(gè)頁(yè)面中有多個(gè)view,那么多個(gè)組件一起mounted,引用的組件即使是相同,也會(huì)獨(dú)立mounted一次,畢竟scope是不一樣的。

我想還是項(xiàng)目結(jié)構(gòu)的問(wèn)題,公共組件的數(shù)據(jù)可以使用vuex的store來(lái)存儲(chǔ),但是并不是說(shuō)解決了多次mounted的問(wèn)題,因?yàn)檫€是上面的解釋。

2018年6月10日 20:16
編輯回答
野橘

組件只渲染或處理數(shù)據(jù),將數(shù)據(jù)請(qǐng)求放到store中或者父組件中

2018年5月7日 08:14