AWS Amplify Auth / react-navigation:認証状態にアクセスする方法は?

ssc

私の中で反応させ、ネイティブモバイルアプリケーション、私が使用して私のユーザーを認証したいAWS Amplifyソフトウェア認証をして使用して、画面間のナビゲーションが管理するナビゲーションに反応します私はすべてを「本によって」実装しようとしました。つまり、ドキュメントに従って、私のアプリは概念的に次のようになります。

// import statements skipped

class FirstTabScreen extends React.Component {
  render = () => {
    {/* access some data passed in screenProps */}
    const someData = this.props.screenProps.someData;
    {/* TODO: how to access AWS Amplify auth data here ?!? */}
    {/* this.props contains screenProps and navigation objects */}
    console.log("this.props: ", this.props);
    {/* this.props.authState is undefined */}
    console.log("this.props.authState: ", this.props.authState);
    return <View><Text>First Tab - some data: {someData}</Text></View>
  };
}

class SecondTabScreen extends React.Component {
  render = () => {
    const otherData = this.props.screenProps.otherData;
    return <View><Text>Second Tab - other data: {otherData}</Text></View>
  };
}

const AppNavigator = createBottomTabNavigator({
  FirstTab: { screen: FirstTabScreen },
  SecondTab: { screen: SecondTabScreen },
});

const AppContainer = createAppContainer(AppNavigator);

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      someData: null,
      otherData: null,
    };
  }

  componentDidMount = () => {
    this.setState({ someData: 'some data', otherData: 'other data' });
  };

  render = () => {
    return (
      <Authenticator>
        <AppContainer
          screenProps={{
            someData: this.state.someData,
            otherData: this.state.otherData,
          }}
        />
      </Authenticator>
    );
  };
}

export default App;

上記のコードサンプルは、いくつかの重要な詳細をスキップしています。完全なエキスポスナックを作成しました

AWS AmplifyAuthenticatorはアプリケーションをラップし、認証データを組み込みコンポーネントで利用できるようにしthis.props.authStateます。ドキュメントを参照してください

私の問題は、この認証データにアクセスする方法がわからないことですたとえばFirstTabScreen、次のようthis.propsscreenPropsなりnavigationますそのコンポーネントでcontainsobjectsですが、this.props.authStateですundefinedAppContainerAppNavigatorの間にAuthenticator及び例えばFirstTabScreen、私が小道具として認証データを渡すか、他の手段によってそれらを輸送する方法を見ていません。

さらに、すべてのデータをscreenProps;のすべての組み込みコンポーネントに渡すだけです。これは機能しますが、すべての画面にすべてのデータが必要なわけではありません。実際に必要なデータのみを渡すにはどうすればよいですか?ルートパラメーターを渡すことについては知っていますが、そこにあるすべてのコードサンプルには、ハンドラーでのButton使用this.props.navigation.navigate(...)がありonPressます。これらの画面にはボタンがなく、ボタンも必要ありません。結局のところ、別のタブに移動するのは、下部のタブナビゲーションバーのタブの目的ですか?!?

誰かが親切に私のためにこれにいくつかの光を当てることができますか?

ファブリツィオベルトリオ

使用screeProp推奨されていませんreact navigation v3

TabNavigatorなどのナビゲーションをコンポーネント内にネストすることはもはや推奨されていないと思います。V3でこのようなケースを適切に処理する方法がよくわかりません。最近、V1からV3にアップグレードしたかったのですが、ネストされたナビゲーターをどうするかについて十分な情報が見つからなかったため、アップグレードをあきらめました。

esipaviciusからの別のアイデア

タブナビゲーターを含むスタックナビゲーターに画面をラップしないでください。たぶん、あなたは使うことはできますnavigationAction setStatesetParamsparamsし、navigatorキーを押します。あなたがdispatchそれをすることができるとき。また、ディスパッチした画面のパラメータを使用して、状態を自動的に変更します。

オプション1-SCREENPROPの使用

画面の小道具渡すオプション

class App extends React.Component {

  componentDidMount = () => {
    this.setState({ someData: 'some data', otherData: 'other data' });
  };

  render = () => {
    return (
      <Authenticator>
        <AppContainer
          screenProps={{ myProp: "test" }}
        />
      </Authenticator>
    );
  };
}

オプション2-REACTCONTEXTAPIの使用

コンテキストAPIを使用して、をラップします<AppContainer>

class App extends React.Component {
  render = () => {
    return (
      <FormContext.Provider value={this.state}>
        <AppContainer />
      </FormContext.Provider>
    );
  };
}

次に、各画面でそれを消費します。

class FirstTabScreen extends React.Component {
  render(){
    return(
      <FormContext.Consumer>
        { (context) => ( 
             // your logic 
        )}
      </FormContext.Consumer>
  };
}

オプション3-タブナビゲーターオブジェクト

TabNavigatorObjectを渡すことができます

createBottomTabNavigator(RouteConfigs, BottomTabNavigatorConfig);

あなたは余分にオプション渡すことができますBottomTabNavigatorではBottomTabNavigatorConfig

const BottomTabNavigator = StackNavigator(routesConfig, BottomTabNavigatorConfig)

BottomTabNavigatorConfigはオプションであり、APIドキュメントを確認できます

{ initialRouteName: 'Home', navigationOptions: .... }

オプション4-親からパラメータを取得する

githubの上で説明したとしてAPIドキュメントには、親コンポーネントを取得し、使用することができますgetParam

const parent = navigation.dangerouslyGetParent();
const yourParam = parent.getParam('yourParamName', 'default value')

githubのタブナビゲーターで小道具を渡すことについての多くの議論を見つけることができます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AWS Amplify Auth:AmplifyConfirmSignUpを無効にする方法は?

分類Dev

AWS Amplify React UIコンポーネント-認証状態変更イベントをディスパッチする方法は?

分類Dev

aws-amplify-reactと@ aws-amplify / ui-reactの違いは何ですか?

分類Dev

aws-amplifyでMFA認証を無効にする方法は?

分類Dev

AWS Amplify with React Native:認証情報は、us-east-1ではなく有効なリージョンにスコープする必要があります

分類Dev

Upload to S3 from React Native with AWS Amplify

分類Dev

AWS Amplify / AppSync Reactアプリで認証されていないユーザーとリクエストを適切に処理するにはどうすればよいですか?

分類Dev

AWS Amplify React Native、GETリクエストエラー403ステータスコード

分類Dev

AWS Amplify AppSync IAM 401

分類Dev

AWS Amplify&Serverless-Stack

分類Dev

AWS Amplify'currentUserCredentials() 'が予期しない認証値を返す、バグ?

分類Dev

Reactで子供の状態にアクセスする方法は?

分類Dev

tabnavigatorでredux状態にアクセスする(react-navigation)

分類Dev

aws-amplifyを使用してnode / expressでaccessTokenを確認する方法は?

分類Dev

Kotlinを使用してAWS Amplifyで認証エラーのタイプを識別する方法は?

分類Dev

AWS Amplify:メールベースの認証のためにソーシャルプロバイダーの属性をマッピングする方法は?

分類Dev

Reactで子供の状態にアクセスする方法は?(Reactフック)

分類Dev

APKを縮小すると、Amplify.Auth.fetchAuthSession()userPoolTokensがnullになります

分類Dev

AWS Amplify Androidで、Amplify.API.post()がGETリクエストを行うのはなぜですか?

分類Dev

AWS Cognito + aws-amplify:セッション状態は常にユーザーのログインを維持しますか?

分類Dev

AWS CognitoサービスAPI?Amplify => Javascript SDKAngularアプリ

分類Dev

AWS Amplify`configure`にはオプションがありません

分類Dev

AWS Amplify HOC Authenticator Reactは、ラップされたコンポーネントにauthStateプロパティを渡しません

分類Dev

AWS Amplify AuthenticatorUIがサインインエラーを確認

分類Dev

AWS Amplifyとamazon-cognito-identity-jsの違いは?

分類Dev

AWS Amplify:一定時間非アクティブになった後にユーザーセッションを期限切れにする方法は?

分類Dev

Is it possible to make user profile changes with AWS Amplify?

分類Dev

ElectronAngular2とaws-amplify

分類Dev

AWS Amplify MissingRequiredParameteruserIdエラー

Related 関連記事

  1. 1

    AWS Amplify Auth:AmplifyConfirmSignUpを無効にする方法は?

  2. 2

    AWS Amplify React UIコンポーネント-認証状態変更イベントをディスパッチする方法は?

  3. 3

    aws-amplify-reactと@ aws-amplify / ui-reactの違いは何ですか?

  4. 4

    aws-amplifyでMFA認証を無効にする方法は?

  5. 5

    AWS Amplify with React Native:認証情報は、us-east-1ではなく有効なリージョンにスコープする必要があります

  6. 6

    Upload to S3 from React Native with AWS Amplify

  7. 7

    AWS Amplify / AppSync Reactアプリで認証されていないユーザーとリクエストを適切に処理するにはどうすればよいですか?

  8. 8

    AWS Amplify React Native、GETリクエストエラー403ステータスコード

  9. 9

    AWS Amplify AppSync IAM 401

  10. 10

    AWS Amplify&Serverless-Stack

  11. 11

    AWS Amplify'currentUserCredentials() 'が予期しない認証値を返す、バグ?

  12. 12

    Reactで子供の状態にアクセスする方法は?

  13. 13

    tabnavigatorでredux状態にアクセスする(react-navigation)

  14. 14

    aws-amplifyを使用してnode / expressでaccessTokenを確認する方法は?

  15. 15

    Kotlinを使用してAWS Amplifyで認証エラーのタイプを識別する方法は?

  16. 16

    AWS Amplify:メールベースの認証のためにソーシャルプロバイダーの属性をマッピングする方法は?

  17. 17

    Reactで子供の状態にアクセスする方法は?(Reactフック)

  18. 18

    APKを縮小すると、Amplify.Auth.fetchAuthSession()userPoolTokensがnullになります

  19. 19

    AWS Amplify Androidで、Amplify.API.post()がGETリクエストを行うのはなぜですか?

  20. 20

    AWS Cognito + aws-amplify:セッション状態は常にユーザーのログインを維持しますか?

  21. 21

    AWS CognitoサービスAPI?Amplify => Javascript SDKAngularアプリ

  22. 22

    AWS Amplify`configure`にはオプションがありません

  23. 23

    AWS Amplify HOC Authenticator Reactは、ラップされたコンポーネントにauthStateプロパティを渡しません

  24. 24

    AWS Amplify AuthenticatorUIがサインインエラーを確認

  25. 25

    AWS Amplifyとamazon-cognito-identity-jsの違いは?

  26. 26

    AWS Amplify:一定時間非アクティブになった後にユーザーセッションを期限切れにする方法は?

  27. 27

    Is it possible to make user profile changes with AWS Amplify?

  28. 28

    ElectronAngular2とaws-amplify

  29. 29

    AWS Amplify MissingRequiredParameteruserIdエラー

ホットタグ

アーカイブ