Alt 通量操作:即使调用 this.generateActions,_this.actions 也未定义
Alt flux action: _this.actions is undefined even when this.generateActions is called
我在我的 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
函数应该填充 UserActions
class 的 actions
属性,还是我需要按顺序编写其他内容有可用的操作?
我相信,使用 ES6,匿名函数中的 this
应该正确地绑定到 UserActions
class.
的 this
我不知道 Alt 的实现是否最近发生了变化,但我不得不用 dispatch 手动编写操作代码,以便让它工作,并直接调用这些函数,而不是尝试使用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
调用不仅是不必要的,而且需要避免,否则使用此动作创建器的商店将不知道您要使用哪个动作。
我还在 getUsers
函数的末尾添加了 return false
来抑制 alt 抛出的控制台警告(当函数不调度时必须返回 false)。
这里调度的动作,getUsersSuccess
和 getUsersFail
,应该在存储中有对应的消耗 parameter/parameters 并影响状态。
没必要再用动作了,试试:
// 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);
我在我的 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
函数应该填充 UserActions
class 的 actions
属性,还是我需要按顺序编写其他内容有可用的操作?
我相信,使用 ES6,匿名函数中的 this
应该正确地绑定到 UserActions
class.
this
我不知道 Alt 的实现是否最近发生了变化,但我不得不用 dispatch 手动编写操作代码,以便让它工作,并直接调用这些函数,而不是尝试使用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
调用不仅是不必要的,而且需要避免,否则使用此动作创建器的商店将不知道您要使用哪个动作。
我还在 getUsers
函数的末尾添加了 return false
来抑制 alt 抛出的控制台警告(当函数不调度时必须返回 false)。
这里调度的动作,getUsersSuccess
和 getUsersFail
,应该在存储中有对应的消耗 parameter/parameters 并影响状态。
没必要再用动作了,试试:
// 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);