2016-04-16 42 views
1

我在我的React/Flux項目中使用Alt庫來表示Flux部分,我得到了動作創建者。Alt flux動作:_this.actions即使在調用this.generateActions時也是未定義的

我創建了以下行動:

// alt.js 
import Alt from 'alt'; 

export default new Alt(); 

// UserActions.js 
import alt from '../alt'; 

class UserActions { 
    constructor() { 
     this.generateActions(
      'getUsersSuccess', 
      'getUsersFailed' 
     ); 
    } 

    getUsers(userId) { 
     $.ajax({ url: '/api/users/'+userId }) 
     .done((data) => { 
      this.actions.getUsersSuccess(data); 
     }) 
     .fail((jqXhr) => { 
      this.actions.getUsersFailed(jqXhr); 
     }); 
    } 
} 

export default alt.createActions(UserActions); 

的問題是行動,this.actions,是不確定的。我是否理解正確,this.generateActions函數應該填充UserActions類的actions屬性,還是需要編寫其他內容才能使這些操作可用?

我相信,使用ES6,在匿名函數中的this應該正確綁定到UserActions類的this

回答

2

我不知道Alt的實現最近是否發生了變化,但我不得不手動編寫帶調度的動作,以使其工作,並直接調用這些函數,而不是嘗試使用actions屬性。

這是我得到的代碼,它可以成功地加載到應用程序映射的方式來存儲和映射操作。

import alt from '../alt'; 

class UserActions{ 
    getUsers(userId) { 
     $.ajax({url: 'api/users/'+userId}) 
      .done((data) => { 
       this.getUsersSuccess(data); 
      }) 
      .fail((jqHxr) => { 
       this.getUsersFail(jqHxr); 
      }); 
     return false; 
    } 

    getUsersSuccess(data) { 
     return (dispatch) => { 
      dispatch(data); 
     } 
    } 

    getUsersFail(jqHxr) { 
     return (dispatch) => { 
      dispatch(jqHxr); 
     } 
    } 
} 

export default alt.createActions(UserActions); 

這種方法的generateActions呼叫構造不僅沒有必要,但需要避免,否則使用這個動作的創造者賣場會不知道你想使用的動作。

我還在函數末尾添加了return false,以抑制由alt引發的控制檯警告(如果函數未派發,則必須返回false)。

此處調度的操作getUsersSuccessgetUsersFail應該在商店中具有消耗參數/參數並影響狀態的對應方。

+1

感謝分享您的解決方案,我也有同樣的問題 –

1

不需要任何更多的使用行爲,請嘗試:

// alt.js 
import Alt from 'alt'; 
export default new Alt(); 

// UserActions.js 
import alt from '../alt'; 

class UserActions { 
    constructor() { 
     this.generateActions(
      'getUsersSuccess','getUsersFailed' 
     ); 
    } 

    getUsers(userId) { 
     $.ajax({ url: '/api/users/'+userId }) 
     .done((data) => { 
      this.getUsersSuccess(data); 
     }) 
     .fail((jqXhr) => { 
      this.getUsersFailed(jqXhr); 
     }); 
    } 
} 
export default alt.createActions(UserActions); 
相關問題