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

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

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

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

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

694閲覧

編集画面に情報を受け渡す(react native)

yamady

総合スコア176

React Native

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

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/02/27 05:42

編集2018/02/27 05:54

お世話になっております。

React Nativeでアプリを作っています。
アイテムの詳細画面から編集画面へ移行する際に、アイテムの情報受け渡しに失敗してしまい編集画面へスムーズに移行することができません。

エラー

'library' is not defined.

ソースコード

LibraryDetail.js

JavaScript

1import React from 'react'; 2import firebase from 'react-native-firebase'; 3import { View, Text, StyleSheet } from 'react-native'; 4import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; 5import { Button } from './common'; 6 7export default class LibraryDetail extends React.Component { 8 render() { 9 const { currentUser } = firebase.auth(); 10 const { name, description, user } = this.props.navigation.state.params; 11 12 return ( 13 <View> 14 <View> 15 <Text>{name}</Text> 16 </View> 17 18 <View> 19 <Text>{description}</Text> 20 </View> 21 22 <View> 23 <Text>{user.name}</Text> 24 <View> 25 26 <View> 27 <Button onPress={()=> this.props.navigation.navigate('Edit')}> 28 Edit 29 </Button> 30 </View> 31 ); 32 } 33}

Detail.js

JavaScript

1 import React from 'react'; 2 import { View, Text, TouchableOpacity, StyleSheet, ScrollView, Image } from 'react-native'; 3 4 import Screen from '../../ui/components/Screen'; 5 import LibraryDetail from '../../ui/components/LibraryDetail'; 6 7class Detail extends React.Component { 8 render() { 9 const { name, description, user } = this.props.navigation.state.params; 10 return ( 11 <Screen> 12 <LibraryDetail library={library} navigation={this.props.navigation} /> 13 </Screen> 14 ); 15 } 16 } 17 18 export default Detail;

Edit.js

JavaScript

1import _ from 'lodash'; 2import React from 'react'; 3import DatePicker from 'react-native-datepicker'; 4import ImagePicker from 'react-native-image-picker'; 5import Icon from '../../ui/components/Icon'; 6import { connect } from 'react-redux'; 7import { View, Text, ScrollView, TouchableOpacity, StyleSheet, Picker, Image } from 'react-native'; 8import * as Theme from '../../theme'; 9import Screen from '../../ui/components/Screen'; 10import FooterTab from '../../ui/components/FooterTab'; 11import { libraryUpdate, librarySave } from '../../ui/redux/uiActions'; 12 13 14class Edit extends React.Component { 15 16 componentWillMount() { 17 _.each(this.props.library, (value, prop) => { 18 this.props.libraryUpdate({ prop, value }); 19 }); 20 } 21 22 onButtonPress() { 23 const { name, descriotion } = this.props; 24 25 this.props.librarySave({ name, description, uid: this.props.library.uid }); 26 } 27 28 29 render() { 30 return ( 31 <Screen> 32 <ScrollView> 33 <CardSection> 34 <Input 35 label={'Library Name'} 36 value={this.props.name} 37 onChangeText={value => this.props.libraryUpdate({ prop: 'name', value })} 38 /> 39 </CardSection> 40 41 ・・・ 42 43 <Button onPress={this.onButtonPress.bind(this)}> 44 Save Changes 45 </Button> 46 </ScrollView> 47 </Screen> 48 ); 49 } 50} 51 52const mapStateToProps = (state) => { 53 const { name, description } = state.libraryForm; 54 55 return { name, description }; 56}; 57 58export default connect(mapStateToProps, { 59 libraryUpdate, 60 librarySave 61})(Edit);

追記①

library={this.props.library}

上記に転記してエラーは出なくなったのですが、やはりデータは引き継げていないようで編集画面でもuidが取れていないエラーとなります。

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

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

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

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

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

m0a

2018/02/27 15:03

多分情報が足りてないですねDetailはStackNavigatorに渡すscreenに相当すると思われますがその辺の処理の記述が抜けています。恐らくそのあたりからlibrayを受け取っているんじゃないですかね?
yamady

2018/02/28 00:46

コメントいただきありがとうございます。Routerの記述が欠けているということでしょうか?Router自体はきちんと機能していて、おそらくlibraryを受け渡す記述が足りていないということでしょうか。
m0a

2018/02/28 01:07 編集

質問内容の情報が足りてないということですね。私自身のコメントも情報不足でした。申し訳ないです。
yamady

2018/03/01 03:15

ありがとうございます。こちら解決したので、自己解決法を記載します!!
guest

回答1

0

自己解決

navigationのライブラリに則った上で、libraryを定義することで表示させることができました。

Detail.js

JavaScript

1・・・ 2 render() { 3 const library = this.props.navigation.state.params.library; 4 return ( 5 <Screen> 6 <LibraryDetail library={library} navigation={this.props.navigation} /> 7 </Screen> 8 ); 9 } 10 } 11・・・

投稿2018/03/01 03:50

yamady

総合スコア176

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問