Javascript 为什么在redux promise中.then()未定义?
我试图在redux状态更新后触发一个事件,所以我运行了一个承诺Javascript 为什么在redux promise中.then()未定义?,javascript,reactjs,redux,Javascript,Reactjs,Redux,我试图在redux状态更新后触发一个事件,所以我运行了一个承诺 logoutHandler = (event) => { console.log("logout Handler") event.preventDefault() window.FB.logout() this.props.LoggedIn(false).then(() => { this.props.history.replace('/signup'); }) }
logoutHandler = (event) => {
console.log("logout Handler")
event.preventDefault()
window.FB.logout()
this.props.LoggedIn(false).then(() => {
this.props.history.replace('/signup');
})
}
注意这一点
this.props.LoggedIn(false).then(() => {
this.props.history.replace('/signup');
})
其中.LoggedIn(false)
是一个redux操作
这是一个错误
无法读取未定义的属性“then”
这是我的重做动作
export const LoggedIn = (isLoggedIn) => {
return function (dispatch) {
dispatch({
type: USER_LOGGED_IN ,
payload: isLoggedIn
})
}
}
问题:有人能告诉我我在这里做错了什么吗?你的Redux行动没有回报承诺。您可以创建并返回一个新的承诺
export const LoggedIn = (isLoggedIn) => {
return function (dispatch) {
return new Promise((resolve, reject) => {
dispatch({
type: USER_LOGGED_IN ,
payload: isLoggedIn
})
resolve();
})
}
}
或者从redux操作本身中执行history.replace
export const LoggedIn = (isLoggedIn, history) => {
return function (dispatch) {
dispatch({
type: USER_LOGGED_IN ,
payload: isLoggedIn
});
history.replace('/signup');
}
}
logoutHandler = (event) => {
console.log("logout Handler")
event.preventDefault()
window.FB.logout()
this.props.LoggedIn(false, this.props.history);
}
你的Redux行动没有回报承诺。您可以创建并返回一个新的承诺
export const LoggedIn = (isLoggedIn) => {
return function (dispatch) {
return new Promise((resolve, reject) => {
dispatch({
type: USER_LOGGED_IN ,
payload: isLoggedIn
})
resolve();
})
}
}
或者从redux操作本身中执行history.replace
export const LoggedIn = (isLoggedIn, history) => {
return function (dispatch) {
dispatch({
type: USER_LOGGED_IN ,
payload: isLoggedIn
});
history.replace('/signup');
}
}
logoutHandler = (event) => {
console.log("logout Handler")
event.preventDefault()
window.FB.logout()
this.props.LoggedIn(false, this.props.history);
}
你需要回报一个承诺 因此,你可以这样做:
logoutHandler = (event) => {
event.preventDefault()
window.FB.logout()
return this.props.LoggedIn(false).then(() => {
this.props.history.replace('/signup');
return Promise.resolve(); // Just return a resolved promise
})
}
你需要回报一个承诺 因此,你可以这样做:
logoutHandler = (event) => {
event.preventDefault()
window.FB.logout()
return this.props.LoggedIn(false).then(() => {
this.props.history.replace('/signup');
return Promise.resolve(); // Just return a resolved promise
})
}
根据
redux thunk
doc,您应该从内部函数返回Promise
以使用。然后
执行操作
来自内部函数的任何返回值都将作为分派本身的返回值。这便于协调异步控制流,thunk action创建者彼此调度并返回等待彼此完成的承诺:
看一下文件
可能的代码已由
Shubham Khatri
共享。根据redux thunk
doc,您应该从内部函数返回Promise
,以使用。然后执行操作
来自内部函数的任何返回值都将作为分派本身的返回值。这便于协调异步控制流,thunk action创建者彼此调度并返回等待彼此完成的承诺:
看一下文件
可能的代码已经被Shubham Khatri共享
要实现与状态更新相关的任何内容,可以使用react生命周期方法componentDidUpdate()。每当redux reducer返回新状态时,整个react应用程序都会重新呈现。渲染后,将对每个组件执行componentDidUpdate方法
componentDidUpdate()在更新发生后立即调用。初始渲染时不调用此方法
要实现任何与状态更新相关的功能,可以使用react生命周期方法componentdiddupdate()。每当redux reducer返回新状态时,整个react应用程序都会重新呈现。渲染后,将对每个组件执行componentDidUpdate方法 componentDidUpdate()在更新发生后立即调用。初始渲染时不调用此方法
您是否从
LoggedIn
操作返回promise
?您可以分享LoggedIn
操作的代码吗?您的redux操作看起来怎么样LoggedIn
?你能显示它的代码吗?@Prasun用Redux更新了我的代码action@ShubhamKhatri请检查我的更新代码您是否从LoggedIn
操作返回promise
?您可以分享LoggedIn
操作的代码吗?您的redux操作看起来怎么样LoggedIn
?你能显示它的代码吗?@Prasun用Redux更新了我的代码action@ShubhamKhatri请检查我的更新代码,当我跟随您的第一个代码片段并执行以下操作时export const LoggedIn=(isLoggedIn)=>{return function(dispatch){return new Promise((拒绝,解析)=>{dispatch({type:USER_LOGGED_IN,payload:isLoggedIn})resolve();}}}
它抛出未捕获(承诺中)另外,Shubham,你能解释一下为什么我需要在行动中使用promise吗?你正在使用a。然后在你的代码中,因此你需要返回aPromise@KuchBhi,我在参数顺序中犯了一个小错误,请检查更新的代码是否dispatch
已返回承诺?如果是,请避免!至少使用Promise.resolve()
而不是newpromise
。当我按照您的第一个代码片段执行类似操作时,export const LoggedIn=(isLoggedIn)=>{return function(dispatch){return new Promise((拒绝,解析)=>{dispatch({type:USER_LOGGED_IN,payload:isLoggedIn})resolve();}}}
它抛出未捕获(承诺中)另外,Shubham,你能解释一下为什么我需要在行动中使用promise吗?你正在使用a。然后在你的代码中,因此你需要返回aPromise@KuchBhi,我在参数顺序中犯了一个小错误,请检查更新的代码是否dispatch
已返回承诺?如果是,请避免!至少使用Promise.resolve()
而不是new Promise
。我是否需要在我的redux操作中也包含Shubham Khatri所做的承诺?另外,请您解释一下我们如何在这里this.props.LoggedIn(false)解析我们在redux操作中所做的承诺。然后(()=>{this.props.history.replace('/signup'));return Promise.resolve();//Just return a resolved Promise})
我是否需要将Shubham Khatri所做的承诺也包括在我的redux操作中?另外,请您解释一下我们如何在这里解析我们在redux操作中所做的承诺this.props.LoggedIn(false)。然后(()=>{this.props.history.replace('/signup'));return Promise.resolve();//只需返回已解析的承诺})