我试图在某个阶段向减速器发送一个动作,但它似乎没有起作用。 showGeo()函数在组件安装时启动。我在控制台中看到的只是一个空数组,这是默认状态。我尝试使用dispatch在返回块中包装代码,但这也不起作用。我是redux的初学者,所以任何帮助都会受到赞赏。
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);
});
});
};
这是reducer文件:
import {
GEO_SUCCESS
} from '../actions/types';
export default (state = [], action) => {
switch (action.type) {
case GEO_SUCCESS:
return action.payload;
default:
return state;
}
};
答案 0 :(得分:1)
好的,我相信我看到了你的问题。您没有在正确的功能中使用dispatch
。如果您在组件中使用showGeo
,则必须让Redux将dispatch
注入showGeo
函数,以便您可以调度sendAction
函数。因此,showGeo
应该与sendAction
类似:
showGeo = () => {
return dispatch => {
//...
dispatch(sendAction()) // where this dispatches the action
}
}
并在您的组件中使用Redux的dispatch
注入mapDispatchToProps
。
我建议您查看Redux docs和Thunk middlewares。我建议仔细阅读教程并浏览Redux examples以更好地掌握它们。