1

我正在实现一个小应用程序,我需要在 firebase 中插入一些数据,然后在数据插入完成后从堆栈中弹出屏幕。

我现在正在调用该操作,并传递一个回调函数以在插入数据后执行,我的代码如下:

EmployeeCreate.js

onButtonPress() {
    const { name, phone, shift, navigator } = this.props;
    this.props.employeeCreate({ name, phone, shift: shift || 'Monday' }, () => {
        console.log('REDIRECT FUNCTION HERE');
        navigator.pop({
        animated: true, // does the pop have transition animation or does it happen immediately (optional)
        animationType: 'fade', // 'fade' (for both) / 'slide-horizontal' (for android) does the pop have different transition animation (optional)
        });
    });
}

EmployeeActions.js

export const employeeCreate = ({ name, phone, shift }, callbackFunction) => {
  const { currentUser } = firebase.auth();
  return () => {
    firebase.database().ref(`/users/${currentUser.uid}/employees`)
    .push({ name, phone, shift })
    .then(callbackFunction);
    //type: EMPLOYEE_CREATE
  };
};

该操作现在没有通过减速器,并且该应用程序似乎运行良好。我只是想知道我是否做得正确,或者是否有更好的方法来实现相同的结果?

4

2 回答 2

1

因为您的employeeCreate函数看起来像一个异步操作,所以异步操作如下所示:

function testAsync(arg1, arg2) {
  return (dispatch) => {
    // dispatch(...)
    fetch(...)
    .then(result => {
      // dispatch(...)
    })
  }
}

你只是没有打电话dispatchemployeeCreate

于 2017-07-11T02:44:55.403 回答
0

此处讨论的另一种可能的解决方案是创建一个 NavigationActions 类,您可以将其包含在任何非组件中,从而在您的操作创建者中使用该类进行导航。听起来更好的解决方案正在开发中,但尚不清楚何时发布。

于 2017-10-31T06:55:30.463 回答