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

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

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

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

Q&A

解決済

2回答

350閲覧

React Nativeでページを引っ張って更新するのを実装する方法

sheckwes

総合スコア13

React Native

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

0グッド

0クリップ

投稿2020/03/11 08:42

編集2020/03/11 09:34

###実装したいこと
react nativeでページを引っ張ってページを更新する。
refreshControlを使っています。


javascript

1export default class Home extends React.Component { 2 constructor(props) { 3 super(props); 4 this.state = { 5 refreshing: false, 6 items: [] 7 }; 8 } 9 10 fetchData() { 11 const items = []; 12 Fire 13 .shared 14 .itemsCollection 15 .get() 16 .then(function(querySnapshot) { 17 querySnapshot.forEach(function(doc) { 18 items.push(doc.data()); 19 }); 20 this.setState({ items: items }); 21 }); 22 } 23 24 _onRefresh() { 25 this.setState({refreshing: true}); 26 this.fetchData().then(() => { 27 this.setState({refreshing: false}); 28 }); 29 } 30 31 async componentDidMount() { 32 const querySnapshot = await Fire 33 .shared 34 .itemsCollection 35 .get() 36 37 const items = []; 38 querySnapshot.forEach(doc => { 39 items.push(doc.data()); 40 }); 41 42 this.setState({ items: items }); 43 } 44 45 render() { 46 const items = this.state.items; 47 return ( 48 <Container> 49 <Content style={styles.cnt} refreshControl={ 50 <RefreshControl 51 refreshing={this.state.refreshing} 52 onRefresh={this._onRefresh.bind(this)} 53 /> 54 }> 55 <View style={styles.list_asset}> 56 {items.map(item => ( 57 <TouchableOpacity style={styles.article_asset}> 58 <Image source={{ uri: item.url }} 59 style={styles.photo}/> 60 <View style={styles.text}> 61 <Text style={styles.phrase}>{item.phrase}</Text> 62 </View> 63 </TouchableOpacity> 64 ))} 65 </View> 66 </Content> 67 </Container> 68 ); 69 } 70}

###現在出ているエラー
ページを引っ張って更新しようとすると
TypeError:undefined is not an object(evaluating 'this.fetchData().then')
と出ます。

fetchData() {
のところのコードがおかしいと思うのですが、原因がわかっていません。


###補足
itemsのドキュメントにはphraseとurlというフィールドがあります。
urlは紐づくStorageのurlです。

ご教示いただけると幸いです。

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

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

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

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

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

guest

回答2

0

自己解決

javascript

1 fetchData = async() => { 2 const querySnapshot = await Fire 3 .shared 4 .itemsCollection 5 .get() 6 7 const items = []; 8 querySnapshot.forEach(doc => { 9 items.push(doc.data()); 10 }); 11 12 this.setState({ items: items }); 13 } 14 15 componentDidMount(){ 16 this.fetchData(); 17 } 18 19 _onRefresh() { 20 this.setState({refreshing: true}); 21 this.fetchData().then(() => { 22 this.setState({refreshing: false}); 23 }); 24 }

投稿2020/03/11 10:15

sheckwes

総合スコア13

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

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

0

fetchData() の前に this. が必要では。

JavaScript

1 _onRefresh() { 2 this.setState({refreshing: true}); 3 this.fetchData().then(() => { 4 this.setState({refreshing: false}); 5 }); 6 }

投稿2020/03/11 09:15

hoshi-takanori

総合スコア7895

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

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

sheckwes

2020/03/11 09:29

@hoshi-takanori さん this.が抜けていました。 ありがとうございます。 ですが、違うエラーが出てしまいました。。
hoshi-takanori

2020/03/11 09:31

fetchData() の Fire の前に return が必要かも?
sheckwes

2020/03/11 10:16

@hoshi-takanori さん ご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問