鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ mobx一個(gè)store設(shè)計(jì)的問題

mobx一個(gè)store設(shè)計(jì)的問題

看了一些例子我設(shè)計(jì)了如下store
一個(gè)頁面的總store,結(jié)構(gòu)如下

//    頁面總的store
class store {
    @observable list: []
    @action async getData(){
        const data = await axios.get('/getgoods');
        this.list = data.map(item => new GoodsModel(this, item));
    }
}
//    每個(gè)商品的model
class GoodsModel {
    store;
    @observable price;
    @observable goodsName;
    @observable goodsImg;
    constructor(store, json){
        this.store = store;
        this.goodsName = json.goods_name;
        this.goodsImg = json.img_url;
        this.price = json.price;
    }
}

每個(gè)單個(gè)商品的model只保存了屬于自己的信息,但是有時(shí)需要用到整個(gè)頁面store中的數(shù)據(jù),所有我在每個(gè)model中有一個(gè)store屬性,但是這樣設(shè)計(jì)在JSON.stringify()中就會報(bào)循環(huán)引用了,因?yàn)閟tore中的list有model,model中又有store,這樣相互依賴的問題如何解決呢,請問mobx還有其他的設(shè)計(jì)思路嗎

回答
編輯回答
默念

你這樣的設(shè)計(jì)是沒問題的,問題在:

  1. 為什么要JSON.stringify()? 你已經(jīng)構(gòu)建出了JS對象,頁面渲染時(shí)直接通過訪問對象屬性即可,應(yīng)該不需要JSON.stringify()。
  2. 如果真的要轉(zhuǎn)換成json字符串,也應(yīng)該先做預(yù)處理,轉(zhuǎn)換除了store以外的其他屬性:price、goodsName、goodsImg。
2017年9月30日 11:37
編輯回答
寫榮

我感覺modal和頁面兩個(gè)store就夠了,公用的部分不一定要在store里面處理,在代碼里面處理

2018年7月17日 21:31