2017-04-14 10 views
4

私はReactNavigationを使用していますが、データリフレッシュをトリガできるように、ビューがいつ表示されるのかが分かりません。この例では、別のナビゲータNavigatorIOS - Is there a viewDidAppear or viewWillAppear equivalent?を使用していますが、https://reactnavigation.org/でどのように動作するかわかりません。ReactNavigationでビューが表示されるタイミングを教える方法

ナビゲーションディスパッチでconsole.logが表示されますが、コンポーネント/画面がフォアグラウンドにあるかどうかを知るために、画面/コンポーネントレベルにフックできるイベントハンドラがありますか?どういうわけかgetStateForActionメソッドにフックする必要がありますか? https://reactnavigation.org/docs/routers/api。実際にカスタムルートハンドラを作成する必要はなく、ビューがフォアグラウンドに入るかどうかを検出するだけです。ナビゲーションイベントを使用して、何とか行うことができます。

+0

 <RootNavigation ref={nav => { this.navigator = nav; }} onNavigationStateChange={(prevState, currentState) => { const currentScreen = this.getCurrentRouteName(currentState); const prevScreen = this.getCurrentRouteName(prevState); if (prevScreen !== currentScreen) { this.props.broadcastActiveScreen(currentScreen); {/*console.log('onNavigationStateChange', currentScreen);*/} } }} /> 

アクション

import { createAction } from 'redux-actions'; import type { Dispatch } from '../state/store'; export const SCREEN_WILL_APPEAR = 'SCREEN_WILL_APPEAR'; const createScreenWillAppearAction = createAction(SCREEN_WILL_APPEAR); export const broadcastActiveScreen = (activeScreen: string) => ( (dispatch: Dispatch) => { dispatch(createScreenWillAppearAction(activeScreen)); } ); 

リデューサー

export default handleActions({ [SCREEN_WILL_APPEAR]: (state, action) => { return Object.assign({}, state, { activeScreen: action.payload, }); }, }, initialState); 

あなたがスタックからビューをポップするときには、例えば意味しますか?最初にコンポーネントがロードされた場合、componentWillMount()は –

+0

と呼ばれています。特定の画面/コンポーネントがビュー内でアクティブになるたびに表示されます。ユーザがホーム画面にナビゲートしたとき、またはアプリケーションイベントがその画面にナビゲートしたとき。 – MonkeyBonkey

+0

あなたはこれを行う方法を考え出しましたか?私は同じことに苦しんでいる。特にタブバーでは、すべてのビューが通常すぐに読み込まれますが、ユーザーが実際に画面を読み込んだときにイベントに興味があります。 – Matt

答えて

0

私はこれを有効にして、アクティブな画面を追跡し、それをルートのナビゲーションonNavigtionChangeイベントに添付して、控除アクションとストアを作成しました。画面部品

componentWillReceiveProps(nextProps) { 
    if (nextProps.activeScreen === 'MyScreenName' && nextProps.activeScreen !== this.props.activeScreen) { 
    // put your on view will appear code here 
    } 
    } 
1

リアクションナビゲーションを使用する場合は、コンポーネントを画面として提供します。あなたはそれらの中であなたが望むものを扱うことができます。これらは反応成分なので、成分の成分量は成分の成分量はです。レンダリングをブロックしていないので、componentDidMountを使用する方が良いです。

初めてコンポーネントをレンダリングする場合は、コンポーネントの部品番号が適しています。次回は、のcomponentWillReceivePropsを使用してください。この関数は、コンポーネントが再び描画されたときに呼び出されます。

更新: 小道具が変更されていない場合は、componentWillReceivePropsがトリガされません。そして私はあなたの状況でそれが起こったと思います。カスタムルーターを作成するか、間隔を置いてトリガーするタイマーを使用する必要があります。

+2

しかし、componentDidMountは、一度だけ、またフォーカスされていなくても起動します。つまり、画面が表示されていないときにアプリ起動時に一度起動され、画面が複数回表示されたりフォーカスが合ったりすることがあります。 – MonkeyBonkey

関連する問題