我是react native的初学者,如果用户已登录,我正在开发一个小型应用程序以显示firebase数据库的供稿。因此,在调用isloggedin函数之后,我使用then函数显示firebase数据。
这是我的isLoggedIn函数:
export const isLoggedIn = () => {
return dispatch => {
firebase.auth().onAuthStateChanged(user => {
if(user){
Actions.main();
dispatch({
type:LOGGED_IN
})
}else {
Actions.auth();
dispatch({
type:NOT_LOGGED_IN
})
}
});
}
};
我在componentDidMount函数中调用isLoggedIn函数;
componentDidMount (){
this.props.isLoggedIn()
.then(() => {
this.props.fetchTweet();
});
}
但是我遇到这样的错误:undefined不是对象(评估'this.props.isLoggedIn()。then')
我希望从代码中显示出我的Firebase数据。
顺便说一句,fetchTweet在没有功能的情况下工作,如果我不使用'then',则isLoogedin也可以工作
最佳答案
这将不起作用,因为this.props.isLoggedIn()
返回一个接受调度对象的函数。 redux thunk(中间件)将拦截此操作。因此,这没有兑现承诺,因此不可补救。它将产生错误。正确的方法是:
componentDidMount (){
// calling only the action creator
this.props.isLoggedIn()
}
在减速器中监听动作,例如:
// Typical reducer
function(state = INITIAL_STATE, action) {
switch(action.type) {
case LOGGED_IN :
// change your state according to the business logic
// for example make a flag IsLoggedIn and make it true
const changed_state = // Your changed state
return changed_state
default:
return state;
}
将状态从mapStateToProps注入到Component,然后执行逻辑,然后执行
this.props.fetchTweet()
。// Implementing mapStateToProps function
const mapStateToProps = function(state) {
// get the key from the state
const loginSuccess = state.IsLoggedIn
return {
loginSuccess
}
componentWilReceiveProps(nextProps) {
if(nextProps.loginSuccess && this.props.loginSuccess !== nextProps.loginSuccess) {
this.props.fetchTweet()
}
}
关于javascript - React Native-未定义不是对象(评估this.props.isLoggedIn.then),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54334491/