2017-05-25 57 views
0

我想在某个阶段派遣一个行动到减速机,但它似乎并没有工作。 showGeo()函数在组件挂载时启动。我在控制台中看到的是一个空数组,这是默认状态。我试图用dispatch包装返回块中的代码,但这也不起作用。我是初学者,所以任何帮助将不胜感激。我试图派遣一个行动,但它似乎并没有注册

export const sendAction = (user) => { 
    return (dispatch) => { 
     dispatch({ type: GEO_SUCCESS, payload: user }); 
    }; 
}; 

export const showGeo =() => { 
    const firebaseRef = firebase.database().ref('/geofire'); 
    const geoFire = new geofire(firebaseRef); 
    let user; 
    const geoQuery = geoFire.query({ 
    center: [37.78, -122.4], 
    radius: 10 //kilometers 
    }); 

    geoQuery.on("key_entered", function(key, location, distance) { 
    console.log("Bicycle shop " + key + " found at " + location + " (" + distance + " km away)"); 

    firebase.database().ref('/users/' + key).once('value').then(function(snapshot) { 
     console.log(snapshot.val()); 
     user = snapshot.val(); 
     sendAction(user); 
     }); 
    }); 
}; 

这里是减速文件:

import { 
    GEO_SUCCESS 
} from '../actions/types'; 

export default (state = [], action) => { 
    switch (action.type) { 
    case GEO_SUCCESS: 
     return action.payload; 
    default: 
     return state; 
    } 
}; 

回答

1

好吧,我相信我看到您的问题。您没有在正确的功能中使用dispatch。如果您在组件中使用showGeo,则必须使用Redux将dispatch注入showGeo函数,以便您可以调用sendAction函数。所以showGeo应类似于sendAction这样的:

showGeo =() => { 
    return dispatch => { 
    //... 
    dispatch(sendAction()) // where this dispatches the action 
    } 
} 

,并在你的组件,你使用终极版的mapDispatchToProps注入dispatch

我建议看看Redux docsThunk middlewares。我建议通过教程并浏览Redux examples以更好地理解它们。

+0

嗨,我忘了提及该用户是一个全局变量可由sendAction访问。无论如何,我会尝试你的建议。谢谢 – moe

+0

好奇....是否有一个原因,它是一个全局变量?您正在使用redux并分派一个操作以将用户包含在其中。 –

+0

没有真正的理由,我改变了代码,按照你的建议提供它作为参数,并且动作仍然没有更新用户的状态。 – moe

相关问题