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**

この質問は、インスタンス メソッド内での関数の呼び出しに関する前回の質問に関連している可能性があります。

Sidenote : 依存関係を更新した後、サーバー側の react-middle-ware の代わりに is を使用するように変更を加え、インポート元 ( from を使用する前) に関連する問題を解決するRouterContext必要がありました。RoutingContextbrowserHistoryreact-routercreateBroswerHistory'history/createBrowserHistory'

編集 1: に置き換えましthis.actions.updateUserSuccess(res.text);alt.actions.HomeActions.updateUserSuccess(res.text);が、updateUserSuccessアクセス可能ですが、まだ警告が表示されますReferenceError: An action was called but nothing was dispatched

console.log(this);編集2:新しいバージョンと古いバージョンを使用して問題の核心にたどり着きましたここにログがあります

古いバージョン:

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