navigator.pop()在回调函数中的形式redux action

时间:2017-07-10 21:22:45

标签: javascript firebase react-native react-redux react-native-navigation

我正在实现一个小应用程序,我需要在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
  };
};

此操作现在不通过reducer,应用程序似乎工作正常。我只是想知道我是否正确地做了,或者是否有更好的方法来实现相同的结果?

2 个答案:

答案 0 :(得分:1)

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

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

您刚刚没有在dispatch中致电employeeCreate

答案 1 :(得分:0)

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