Ios 反应本机-在异步操作后导航

Ios 反应本机-在异步操作后导航,ios,reactjs,react-native,redux,react-router-redux,Ios,Reactjs,React Native,Redux,React Router Redux,我正在开发一个带有React Native和Redux的移动应用程序,我面临一个软件设计问题。 我想调用RESTAPI(异步操作)进行登录,如果操作成功,则导航到主视图。 我正在使用redux和thunk,所以我已经实现了异步操作,所以我的主要疑问是:我应该把逻辑放在哪里来导航到主视图 我可以直接从操作访问navigator对象并在那里执行导航吗? 我应该在登录组件中这样做吗?(因为我已经在做了-检查下面的代码) 我不相信组件中有这样的逻辑。这似乎不是一个好的做法。还有别的办法吗 感谢您使用当前

我正在开发一个带有React Native和Redux的移动应用程序,我面临一个软件设计问题。 我想调用RESTAPI(异步操作)进行登录,如果操作成功,则导航到主视图。 我正在使用redux和thunk,所以我已经实现了异步操作,所以我的主要疑问是:我应该把逻辑放在哪里来导航到主视图

我可以直接从操作访问navigator对象并在那里执行导航吗? 我应该在登录组件中这样做吗?(因为我已经在做了-检查下面的代码)

我不相信组件中有这样的逻辑。这似乎不是一个好的做法。还有别的办法吗


感谢您使用当前的Navigator API,这是react native中最难解决的问题之一。我建议拥有一个保存当前路线的路线存储,并将包含导航器的组件连接到此存储,并在
组件上触发导航将接收道具

以下是我的代码:

                const resetAction = NavigationActions.reset( {
                    index  : 0,
                    actions: [
                        NavigationActions.navigate( { routeName: 'Home' } )
                    ]
                } );

                this.props.requestDeleteEvent( {
                    id: eventID
                } ).then( () => {
                    this.props.navigation.dispatch( resetAction );
                } );
和内部函数requestDeleteEvent:

export function requestDeleteEvent(requestData) {
    const id = requestData.id;

    return (dispatch, getState) => {
        return fetch(Config.event + id, {
            method: 'DELETE',
            headers: {
                'Content-Type': 'application/json; charset=UTF-8',
            },
        })
            .then((response) => getResponseJson(response))
            .then((responseJson) => {
                    if (responseJson.isSuccess) {
                        return dispatch(deleteEvent(id));
                    } 
                    else {
                        return dispatch(triggerToast({type: 'alert', content: ERROR}));
                    }
                }
            );
        }
    }
export function requestDeleteEvent(requestData) {
    const id = requestData.id;

    return (dispatch, getState) => {
        return fetch(Config.event + id, {
            method: 'DELETE',
            headers: {
                'Content-Type': 'application/json; charset=UTF-8',
            },
        })
            .then((response) => getResponseJson(response))
            .then((responseJson) => {
                    if (responseJson.isSuccess) {
                        return dispatch(deleteEvent(id));
                    } 
                    else {
                        return dispatch(triggerToast({type: 'alert', content: ERROR}));
                    }
                }
            );
        }
    }