0

サービス オーバーレイ (Facebook メッセンジャーのバブル ヘッドなど) を表示し、Android でのみ実装する反応ネイティブ アプリケーションを構築しています。オーバーレイをクリックすると、特定の画面でアプリに戻る必要があります。

私は react-router-native を使用しており、ルートは次のように構成されています。

App.js

<NativeRouter>
    <ApolloProvider client={client}>
        <Main>
            <Switch>
                <Route exact path="/home" component={Home} />
                <Route exact path="/progress" component={RouteProgress} />
                <Route exact path="/search" component={Search} />
            </Switch>            
        </Main>
    </ApolloProvider>
</NativeRouter>

Mainコンポーネントには次のものがあります。

Main.js

componentDidMount() {
    console.log(this.props.location.pathname);
    if(this.props.location.pathname === '/') {
        this.props.history.push("/home");
    }       
}

私のネイティブ モジュールからのコールバックは、次のように呼び出されています。

FloatingView.java

case MotionEvent.ACTION_UP:
        if (lastAction == MotionEvent.ACTION_DOWN || delta < 3) {
            Intent intent = new Intent(FloatingWindow.this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);

            FloatingViewPackage.callback.invoke();                                              

            stopSelf();
        }

コールバックはコンポーネントで定義されSearch、ネイティブ モジュールも実行します。

検索.js

<Button onPress={() => FloatingView.init(() => {
    console.log('go to progress 1');
    this.props.history.push("/progress");

    setTimeout(() => {
        console.log('go to progress 2');
        this.props.history.push("/progress");
    }, 1000);
})}

問題はthis.props.history.push("/progress");、タイムアウトの外側でも内側でも機能しないことです。タイムアウト外では、関数は前に呼び出されますMain componentDidMountlocation.pathname、更新されません。その中で関数は後で呼び出されますが、正しい画面に移動しません。それは常にに陥り/homeます。

検索コンポーネントがマウントされていないため、これはライフサイクルの問題だと思いました。私はこれを機能させる方法を見つけようとしています。コンポーネントを使用してみましたRedirect

<Button onPress={() => FloatingView.init(() => <Redirect to="/progress" />)}

とにかくこれを回避する方法を考えることができますか?ありがとう

4

1 に答える 1