質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

Q&A

解決済

3回答

2341閲覧

react native パラメータが引き渡せない

shomy

総合スコア9

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

0グッド

1クリップ

投稿2020/08/28 06:06

##LoginScreenからRecordScreenに遷移させるときにパラメータが引き渡せない

下記のようにLoginScreenからRecordScreenに遷移させるとき、パラメータが引き渡せず、
props.route.paramsがundefinedになってしまいます。
どのようにすればuserパラメータをRecordScreenに引き渡せますでしょうか?

問題の箇所を抜粋。 .then(function (user) { navigation.navigate("Record", { currentUser: user }); }) 詳細は下記

LoginScreen

1export default LoginScreen = ({ navigation }) => { 2 const initialEmail = ""; 3 const initialPassword = ""; 4 const [email, esetText] = useState(initialEmail); 5 const [password, psetText] = useState(initialPassword); 6 const onPress = () => { 7 firebase 8 .auth() 9 .signInWithEmailAndPassword(email, password) 10 .then(function (user) { 11 navigation.navigate("Record", { currentUser: user }); 12 }) 13 .catch(function (error) { 14 // Handle Errors here. 15 const errorCode = error.code; 16 const errorMessage = error.message; 17 alert(errorCode); 18 alert(errorMessage); 19 // ... 20 }); 21 }; 22 23 return ( 24 <View style={styles.container}> 25 <Text style={styles.title}>ログイン</Text> 26 <TextInput 27 style={styles.input} 28 value={email} 29 onChangeText={(email) => esetText(email)} 30 autoCapitalize="none" 31 autoCorrect={false} 32 placeholder="Email" 33 /> 34 <TextInput 35 style={styles.input} 36 value={password} 37 onChangeText={(password) => psetText(password)} 38 autoCapitalize="none" 39 autoCorrect={false} 40 placeholder="Password" 41 secureTextEntry={true} 42 /> 43 <TouchableHighlight style={styles.button} onPress={onPress}> 44 <Text style={styles.buttonText}>ログイン</Text> 45 </TouchableHighlight> 46 </View> 47 ); 48};

RecordScreen

1export default RecordScreen = (props) => { 2 3 const { navigation, route } = props; 4 const params = route.params; 5 console.log(navigation); 6 console.log(route); 7 console.log(params); 8 return ( 9 <SafeAreaView style={styles.container}> 10 <TouchableOpacity style={styles.circleButton} onPress={onPress}> 11 <Text style={styles.circleButtonTitle}>+</Text> 12 </TouchableOpacity> 13 </SafeAreaView> 14 ); 15};

下記がログです。

log

1console.log(navigation); 23Object { 4 "addListener": [Function addListener], 5 "canGoBack": [Function canGoBack], 6 "dangerouslyGetParent": [Function dangerouslyGetParent], 7 "dangerouslyGetState": [Function anonymous], 8 "dispatch": [Function dispatch], 9 "goBack": [Function anonymous], 10 "isFocused": [Function isFocused], 11 "jumpTo": [Function anonymous], 12 "navigate": [Function anonymous], 13 "pop": [Function anonymous], 14 "popToTop": [Function anonymous], 15 "push": [Function anonymous], 16 "removeListener": [Function removeListener], 17 "replace": [Function anonymous], 18 "reset": [Function anonymous], 19 "setOptions": [Function setOptions], 20 "setParams": [Function anonymous], 21} 22 23console.log(route); 2425Object { 26 "key": "Record-23v2YUDv-hWZtJX9yj4T2", 27 "name": "Record", 28 "params": undefined, 29} 30 31console.log(params); 3233undefined 34

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

データを取り出す側(RecordScreen)で、
const params = route.params;
を、
const { currentUser } = route.params;
に変えたら動きますでしょうか?

追記: 上記コメントしましたが、確かに、thenの中からの受け渡しはできないかもですね。
Firebaseから直接currentUserを取得する方法はどうでしょう?

まずRecordScreenでも、firebaseをインポートします。
そして、
const { currentUser } = firebase.auth();
とすれば、取得出来るはずです。

僕はいつもこの方法で取得しています。
試してみてください。以下firebaseのドキュメントです。
https://firebase.google.com/docs/auth/web/manage-users?hl=ja#get_the_currently_signed-in_user

投稿2020/09/08 04:38

編集2020/09/08 06:40
Akira25

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

https://reactnavigation.org/docs/params/

こちらをご確認ください。

LoginScreen で 以下のように記載があるので、

navigation.navigate("Record", { currentUser: user });

RecordScreen では、

以下の部分をご変更してみてください

const params = route.params;

const {currentUser} = route.params;

投稿2020/09/03 09:36

編集2020/09/08 05:06
sunsunny-k

総合スコア80

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

おそらくreact-navigationを使っていると思いますが、バージョンはいくつですか?
3.X,4.X,5.Xで仕様が異なるため、paramの呼び方も異なります。
下記のような取得はできませんか?

javascript

1navigation.getParam('currentUser')

投稿2020/08/28 06:15

nekoniki

総合スコア2411

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shomy

2020/08/29 11:46 編集

お返事ありがとうございます。 バージョンは下記のような感じです。 "@react-navigation/bottom-tabs": "^5.8.0", "@react-navigation/native": "^5.7.3", "@react-navigation/stack": "^5.9.0", navigation.getParam('currentUser')だとうまくいきませんでした汗 下記みたいなエラーがでてきます ``` TypeError: navigation.getParam is not a function. (In 'navigation.getParam("currentUser")', 'navigation.getParam' is undefined) This error is located at: in RecordScreen (at SceneView.tsx:122) in StaticContainer in StaticContainer (at SceneView.tsx:115) ```
shomy

2020/08/31 11:33

出来ませんでした。。。 下記のログインメソッドのthenの中だと使えないとかですかね。。。 signInWithEmailAndPassword(email, password).then(function (user) { })
shomy

2020/08/31 12:08 編集

難しいですね。。
nekoniki

2020/08/31 14:36

> 下記のログインメソッドのthenの中だと使えないとかですかね。。。 そんなことはないと思いますが・・・ then以外の箇所で同じ記載をすると値が渡るということですか?
shomy

2020/09/04 07:15

そうですね。 navigation.navigate("Record", { currentUser: user }); この書き方で行けるっぽいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問