Возникли проблемы с доступом к действиям React в изоморфном приложении

Я использую Alt.js с React и получаю ошибку в файле 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: После обновления зависимостей мне также пришлось внести изменения в использование RouterContext часть RoutingContext в промежуточном программном обеспечении на стороне сервера и для решения проблемы, связанной с тем, что я импортировал browserHistory от react-router (прежде чем я использовал createBroswerHistory от '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

Очевидно, что в более новой версии нет способа отправки. Может кто-нибудь объяснить, почему это так?

0 ответов

Другие вопросы по тегам