我正在使用我的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
正确绑定。
答案 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)。
此处调度的操作getUsers
和getUsersSuccess
应该在商店中具有消耗参数/参数并影响状态的对应项。
答案 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);