我正在使用带有 React 的 Alt.js 并在 HomeActions.js 文件中出现错误HomeActions.js: Uncaught TypeError: Cannot read property 'updateUserSuccess' of undefined
。更不用说在我完全重新安装 node_modules 之前,相同的代码可以完美运行。
这是代码
import alt from '../../alt';
import request from 'superagent';
class HomeActions {
constructor() {
this.generateActions(
'updateUserSuccess',
);
}
getUser() {
request
.get('api/getuser')
.end((err, res) => {
this.actions.updateUserSuccess(res.text);
});
}
}
export default alt.createActions(HomeActions);
getUser()
componenetdidmount(){}
在Home.js的函数中调用
也直接从组件调用 action 属性确实有效,所以我想问题不在于 Alt.js 或 generateActions :例如
import alt from '../../alt';
class NavbarActions {
constructor() {
this.generateActions(
'updateOnlineUsers'
);
}
}
export default alt.createActions(NavbarActions);
//in Navbar.js
componentDidMount() {
NavbarStore.listen(this.onChange);
NavbarActions.updateOnlineUsers(somedata);
}
//this is working**
这个问题可能与我上一个关于在实例方法中调用函数的问题有关。
旁注:更新依赖项后,我还必须更改使用RouterContext
i 而不是RoutingContext
在服务器端 react-middle-ware 中,并解决与我导入的相关问题browserHistory
(react-router
在我使用createBroswerHistory
from之前'history/createBrowserHistory'
)
编辑1:我替换this.actions.updateUserSuccess(res.text);
为alt.actions.HomeActions.updateUserSuccess(res.text);
并且updateUserSuccess
可以访问但仍然收到警告ReferenceError: An action was called but nothing was dispatched
编辑 2:我刚刚通过console.log(this);
在较新版本和旧版本中使用来解决问题的核心,这里是日志
旧版本:
AltAction {id: "HomeActions.getTwoCharacters", actions: Object, actionDetails: Object, alt: Alt, dispatched: false}
_dispatch : ()
actionDetails :
Object actions :
Object alt :
Alt dispatched :
false id :
"HomeActions.getTwoCharacters"
__proto__ : Object
新版本
Object {GET_USER: "HomeActions.getUser", LOGOUT: "HomeActions.logout", UPDATE_USER_SUCCESS: "HomeActions.updateUserSuccess", UPDATE_USER_FAIL: "HomeActions.updateUserFail", LOGOUT_SUCCESS: "HomeActions.logoutSuccess"…}
GET_USER : "HomeActions.getUser"
LOGOUT : "HomeActions.logout"
LOGOUT_FAIL : "HomeActions.logoutFail"
LOGOUT_SUCCESS : "HomeActions.logoutSuccess"
UPDATE_USER_FAIL : "HomeActions.updateUserFail"
UPDATE_USER_SUCCESS : "HomeActions.updateUserSuccess"
getUser : action()
logout : action()
logoutFail : action()
logoutSuccess : action()
updateUserFail : action()
updateUserSuccess : action()
__proto__ : Object
很明显,新版本中没有调度方法。有人可以解释为什么会这样吗?