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

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

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

//    頁(yè)面總的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è)頁(yè)面store中的數(shù)據(jù),所有我在每個(gè)model中有一個(gè)store屬性,但是這樣設(shè)計(jì)在JSON.stringify()中就會(huì)報(bào)循環(huán)引用了,因?yàn)閟tore中的list有model,model中又有store,這樣相互依賴(lài)的問(wèn)題如何解決呢,請(qǐng)問(wèn)mobx還有其他的設(shè)計(jì)思路嗎

回答
編輯回答
默念

你這樣的設(shè)計(jì)是沒(méi)問(wèn)題的,問(wèn)題在:

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

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

2018年7月17日 21:31