Alt flux动作:即使调用this.generateActions,_this.actions仍未定义

时间:2016-04-16 10:21:51

标签: javascript ecmascript-6 reactjs-flux

我正在使用我的React / Flux项目中的Alt库代表Flux部分,我开始创作动作。

我创建了以下操作:

// 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函数应填充actions类的UserActions属性,还是需要编写其他内容才能使操作可用?

我相信,使用ES6,匿名函数中的this应该与this类的UserActions正确绑定。

2 个答案:

答案 0 :(得分:2)

我不知道Alt的实现最近是否已更改,但我不得不手动使用dispatch对操作进行编码,以使其正常工作,并直接调用这些函数,而不是尝试使用{{{ 1}}属性。

这是我已经获得的代码,可以成功加载存储并按照应该映射的方式映射动作。

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)。

此处调度的操作getUsersgetUsersSuccess应该在商店中具有消耗参数/参数并影响状态的对应项。

答案 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);