Возникли проблемы с доступом к действиям 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
Очевидно, что в более новой версии нет способа отправки. Может кто-нибудь объяснить, почему это так?