1

我正在使用带有 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**

这个问题可能与我上一个关于在实例方法中调用函数的问题有关。

旁注:更新依赖项后,我还必须更改使用RouterContexti 而不是RoutingContext在服务器端 react-middle-ware 中,并解决与我导入的相关问题browserHistoryreact-router在我使用createBroswerHistoryfrom之前'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

很明显,新版本中没有调度方法。有人可以解释为什么会这样吗?

4

0 回答 0