サービス オーバーレイ (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
componentDidMount
がlocation.pathname
、更新されません。その中で関数は後で呼び出されますが、正しい画面に移動しません。それは常にに陥り/home
ます。
検索コンポーネントがマウントされていないため、これはライフサイクルの問題だと思いました。私はこれを機能させる方法を見つけようとしています。コンポーネントを使用してみましたRedirect
:
<Button onPress={() => FloatingView.init(() => <Redirect to="/progress" />)}
とにかくこれを回避する方法を考えることができますか?ありがとう