0

が、私は任意の画面からカスタム移行を渡すことができるように、私が作成したトランジションの設定です:React Navigationを使用してReact Nativeのカスタムとデフォルトの切り替えを切り替えることはできますか?以下

const TransitionConfiguration =() => ({ 
     // Define scene interpolation, eq. custom transition 
    screenInterpolator: (sceneProps) => { 
    const { position, scene } = sceneProps; 
    const { index, route } = scene; 
    const params = route.params || {}; 
    const defaultTransition =() => ({}); 
    const transition = params.transition || defaultTransition; 

    return transition(index, position); 
    }, 
}); 

const navigationOptions = { 
    navigationOptions: { 
    headerStyle: { 
     backgroundColor: background.color4, 
     shadowColor: primary.color2, 
    }, 
    headerTitleStyle: { color: primary.color1 }, 
    }, 
    transitionConfig: TransitionConfiguration, 
}; 

あなたが観察できるとして、私は、ルートのparamとして、あるいはない移行を経過している場合は、私が確認してください。それが渡されなければ、空のオブジェクトを返すデフォルト関数を渡します。

移行設定を渡さないと、StackNavigatorのデフォルトの移行に戻すことはできますか?

答えて

1

あなたはTransitionConfigs.js

function getTransitionConfig(

    ... 
    ... 

    if (transitionConfigurer) { 
    return { 
     ...defaultConfig, 
     ...transitionConfigurer(), 
    }; 
    } 
    return defaultConfig; 

をチェックする場合は、カスタム移行コンフィギュレータを定義するとき、それはトランジションを定義するために使用されているtransitionSpec and screenInterpolator小道具を上書きすることがわかります。

この場合、screenInterpolatorを定義することで、これは唯一の移行となります。デフォルトのものを含めて多くを定義したい場合は、my post hereを参照し、デフォルトのものでカスタムのものを拡張してください。

意味すると、あなたのscreenInterpolatorは、params.transitionが定義されているかどうかを確認する必要があります。

+0

ねえ、私はデフォルトの推移を見ていないです。私は、移行設定がparams経由で渡されないと、空のオブジェクトを送信するので、私の移行がデフォルトになっていると感じます。 –

+0

@ rash.tay申し訳ありませんが、私の側から間違った声明、私は答えを更新しました。 –

+0

ねえ、私は同じポストに従っています。あなたが観察した場合、paramsを経由してカスタムの移行設定が送信されない場合は、デフォルトの設定を渡します。私は自分でデフォルトの設定を渡したくありません。私はスタックナビゲータのデフォルトの移行設定にフォールバックしたいと思います。もし私が私のroute.paramsからの移行を渡したかどうかを知ることができれば、私はそれを行うことができます。 route.params.transitionが未定義の場合は、transitionConfigプロパティをまったく設定しないことは可能ですか? –

1

したがって、反応ナビゲーションのコードに少し掘り下げた後、デフォルト遷移を実行する機能を提供するCardStackStyleInterpolatorというファイルがあることがわかりました。

私はちょうどそのファイルからエクスポートされたforHorizontal関数を使用しました。私はすべてのケースやデバイスのためにそれを処理していないが、私はそれが簡単に処理することができると思う。また、デフォルトのケースでコードを繰り返す必要もありません。以下は

は抜粋です:

import DefaultTransition from 'react-navigation/src/views/CardStack/CardStackStyleInterpolator'; 

const TransitionConfiguration =() => ({ 
     // Define scene interpolation, eq. custom transition 
    screenInterpolator: (sceneProps) => { 
    const { position, scene, layout } = sceneProps; 
    const { index, route } = scene; 
    const params = route.params || {}; 
    const transition = params.transition; 

    return transition && typeof transition === 'function' 
      ? transition(index, position, layout) 
      : DefaultTransition.forHorizontal(sceneProps); 
    }, 
}); 
関連する問題