因此,我执行此login()
操作,如果登录成功,则将用户重定向到供稿。我也有这个register()
动作,可以创建一个新用户并在之后调用login()
动作。
问题是login()
从register()
调用时没有收到道具,所以我不能从那里调用this.navigation.navigate('Feed')
。
userActions.js
function register(user) {
return dispatch => {
dispatch(request(user));
let { username, password } = user
userService.register(user)
.then(
user => {
dispatch(success(user));
dispatch(login(username, password)) //calls login() after the user is created
},
error => {
dispatch(failure(error.toString()));
}
);
};
function request(user) { return { type: userConstants.REGISTER_REQUEST, user } }
function success(user) { return { type: userConstants.REGISTER_SUCCESS, user } }
function failure(error) { return { type: userConstants.REGISTER_FAILURE, error } }
}
function login(username, password) {
return dispatch => {
dispatch(request({ username }));
userService.login(username, password)
.then(
user => {
dispatch(success(user));
this.navigation.navigate('Feed') //this is throwing "undefined is not an object" when login() is dispatched from register()
},
error => {
dispatch(failure(error.toString()));
}
);
};
function request(user) { return { type: userConstants.LOGIN_REQUEST, user } }
function success(user) { return { type: userConstants.LOGIN_SUCCESS, user } }
function failure(error) { return { type: userConstants.LOGIN_FAILURE, error } }
}
我在这里想念什么?
答案 0 :(得分:1)
我认为您的代码需要修复一些。 在redux动作中处理导航不是一个好的解决方案。为了避免这种情况,建议将Saga与Redux一起使用。
但是,使用此代码,您没有将导航属性传递给动作,因此您需要传递props变量来首先注册动作。 请这样尝试。
function register(user, props) {
...
dispatch(login(username, password, props))
...
function login(username, password, props) {
...
props.navigation.navigate('Feed')
然后导航将起作用。 希望这可以帮助您了解) 根据我的经验,我建议将Redux和Saga用作堆栈。