第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

dvajs Model幾個(gè)疑問??

dvajs Model幾個(gè)疑問??

開心每一天1111 2019-03-05 16:31:05
1、一個(gè)頁(yè)面配置幾個(gè)Model是根據(jù)什么?2、dva文檔說effects里不直接修改state,請(qǐng)問是在dispatch里傳鍵名,effects接收后填到state嗎?3、我以為的dva的概念大概是,UI事件、網(wǎng)絡(luò)回調(diào),都會(huì)觸發(fā)action,最后驅(qū)動(dòng)組件更新,但現(xiàn)在是model通過props傳入組件4、dvajs到底提供了什么?看我下面的代碼,這樣有違effects里不直接修改state嗎?
查看完整描述

1 回答

?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊

dva設(shè)計(jì)動(dòng)機(jī)

用過redux都知道,redux設(shè)計(jì)思想極好,但學(xué)習(xí)概念很多,晦澀難懂,不利于初學(xué)者,并且開發(fā)過程中,牽一發(fā)而動(dòng)全身,往往改一個(gè)小地方,需要在 reducer, saga, action 之間來回切換 ,因此支付寶前端團(tuán)隊(duì)才寫的dva。

dva概念

dva 是基于現(xiàn)有應(yīng)用架構(gòu) (redux + react-router + redux-saga 等)的一層輕量封裝,沒有引入任何新概念!說白了,dva就是為了解決redux現(xiàn)有問題(比如概念多,編寫繁瑣。。。)而設(shè)計(jì)的庫(kù)。您可以把它理解成jquery對(duì)js的封裝!

model方法

dva核心就是 model 方法,用于把 reducer, initialState, action, saga 封裝到一起,其中Model是相關(guān)業(yè)務(wù)操作集合體,是面向業(yè)務(wù)的一個(gè)拆分,因此Model叫做domain model(業(yè)務(wù)模型)更合理些。一般情況model都按照功能模塊劃分,就比如公司項(xiàng)目A,這個(gè)項(xiàng)目包含用戶模塊、產(chǎn)品模塊、活動(dòng)模塊, 那您就可以拆分成三個(gè)Model,分別為user.js、product.js、activitie.js,如果其中一個(gè)模塊過于龐大您可以再細(xì)分,具體依據(jù)自己的業(yè)務(wù)!

dva開發(fā)流程

當(dāng)用戶交互改變數(shù)據(jù)時(shí)會(huì)通過 dispatch 發(fā)起一個(gè) action,同步行為會(huì)直接通過 reducers 改變 state ,異步行為則先觸發(fā) effects 然后再通過 reducers 改變 state,其中 dispatch 是在組件 connect models以后,通過 props 傳入的。該設(shè)計(jì)思路基本跟開源社區(qū)保持一致,現(xiàn)在我們舉例說明下dva開發(fā)流程,同步行為,異步行為都有:

/**

* 這是user組件(Component)

*/

// ES7新標(biāo)準(zhǔn):裝飾器(Decorator)

@connect(state => ({

    user: state.user,

}))


// 如果您不喜歡ES7裝飾器,那好辦,我就幫您寫一個(gè)不用的

export default connect(state => ({

    user: state.user,

}))(User);


// 如果不喜歡ES7裝飾器,就不要加export default

export default class User extends Component {

    componentDidMount() {

        const { dispatch } = this.props;

        // 獲取數(shù)據(jù),異步行為

        dispatch({

          type: 'user/fetch',

        });

    }

    componentWillUnmount() {

        const { dispatch } = this.props;

        // 清空數(shù)據(jù),同步行為

        dispatch({

          type: 'user/clear',

        });

    }

    render() {

        const { user } = this.props;

        // 獲取到數(shù)據(jù)了,我要展示到頁(yè)面上

        const { userData, } = user;

        return (

            <div>

              用戶數(shù)據(jù):{userData}

            </div>

        )

    }

}


/**

* 這是user model(Model)

*/

export default {

    namespace: 'user',

    state: {

        userData: [],

    },


    effects: {

        *fetch(_, { call, put }) {

            // fetchUserData為獲取user數(shù)據(jù)的函數(shù)

            const response = yield call(fetchUserData);

            yield put({

                type: 'save',

                payload: response,

            });

        },

    },


  reducers: {

      save(state, { payload }) {

          return {

              ...state,

              ...payload,

          };

      },

      clear() {

          return {

              userData: [],

          };

      },

  },

};


查看完整回答
反對(duì) 回復(fù) 2019-03-07
  • 迷失的小菜鳥
    迷失的小菜鳥
    我想請(qǐng)問一下,一個(gè)路由組件下的子組件想獲取當(dāng)前model中的state只能通過父組件傳遞props嗎?不可以在子組件里直接獲取model中的state嗎?
  • 1 回答
  • 0 關(guān)注
  • 895 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)