我正在实现一个小应用程序,我需要在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,应用程序似乎工作正常。我只是想知道我是否正确地做了,或者是否有更好的方法来实现相同的结果?
答案 0 :(得分:1)
因为您的employeeCreate
函数看起来像异步操作,所以异步操作如下所示:
function testAsync(arg1, arg2) {
return (dispatch) => {
// dispatch(...)
fetch(...)
.then(result => {
// dispatch(...)
})
}
}
您刚刚没有在dispatch
中致电employeeCreate
。
答案 1 :(得分:0)
另一个可能的解决方案,讨论here,是创建一个NavigationActions类,您可以将其包含在任何非组件中,从而在您的操作创建者中进行导航。这听起来似乎是一个更好的解决方案,但尚不清楚何时发布。