私がインストールした現在のバージョン(3.35.0)には、 Router
にカスタムbackButtonHandler
を割り当てるためのプロビジョニングがあります。 これは便利ですが、私のアプリでは特定の画面でカスタム動作が必要です。
以前のバージョンでは、グローバルなBackAndroid
イベントリスナーがあり、現在フォアグラウンドにあるコンポーネントをActions.currentRouter.stack
でナビゲーションスタックから取得していました。 コンポーネントのプロトタイプチェーンには、カスタム動作を処理するonBackButton()
メソッドがありました。
新しいアクションAPIでは、currentRouterが公開されていません。 すべてのコンポーネントでaddEventListener
を使用でき、 componentWillUnmount
でremoveEventListener
$を使用できます。 しかし、これを達成するためのよりクリーンな方法はありますか?
そうでない場合は、次のいずれかを提案します。
Scene
APIにbackButtonHandler
プロップがあります。皆さんはどう思いますか?
この投稿の内容を削除し、 You are already in the root scene
について別の問題を作成して、そこに配置しました。
ねえ、私は同じ問題を抱えています、そしてcomponentWillUnmountメソッドでイベントハンドラーを削除することはこのライブラリでは機能しないようです、あなたは他の解決策を見つけましたか?
RNを0.32にアップグレードする必要があります。
これにより、ほとんどのシーンのグローバルハンドラーを使用できます。 これらの特別なシーンでは、 BackAndroid.addEventListener('hardwareBackPress', this.handleAndroidBack)
を追加できます。RNは最初に後のリスナーコールバックを呼び出します。後のリスナーコールバックでreturn true
を使用した場合、グローバルハンドラーは呼び出されません。 私はそれがより良い解決策だと思います。 リスナーのコールバックを削除することを忘れないでください。
最も参考になるコメント
RNを0.32にアップグレードする必要があります。
これにより、ほとんどのシーンのグローバルハンドラーを使用できます。 これらの特別なシーンでは、
BackAndroid.addEventListener('hardwareBackPress', this.handleAndroidBack)
を追加できます。RNは最初に後のリスナーコールバックを呼び出します。後のリスナーコールバックでreturn true
を使用した場合、グローバルハンドラーは呼び出されません。 私はそれがより良い解決策だと思います。 リスナーのコールバックを削除することを忘れないでください。