我正在尝试发送一个动作,但它似乎没有注册

时间:2017-05-25 23:30:52

标签: redux react-redux redux-thunk

我试图在某个阶段向减速器发送一个动作,但它似乎没有起作用。 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;
  }
};

1 个答案:

答案 0 :(得分:1)

好的,我相信我看到了你的问题。您没有在正确的功能中使用dispatch。如果您在组件中使用showGeo,则必须让Redux将dispatch注入showGeo函数,以便您可以调度sendAction函数。因此,showGeo应该与sendAction类似:

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

并在您的组件中使用Redux的dispatch注入mapDispatchToProps

我建议您查看Redux docsThunk middlewares。我建议仔细阅读教程并浏览Redux examples以更好地掌握它们。