昨日投稿した「【React Native】「react-native-swipe-hidden-header」ライブラリの「Unable to resolve module AccessibilityInfo」エラーの対処法【未解決】」という記事の続編です。
上記の記事で、「Unable to resolve module AccessibilityInfo」は解消したものの、また別のエラーが発生した、と書きましたが、進展があったのでまとめ。
なお、ライブラリの GitHub はこちら。
fengliu222/react-native-swipe-hidden-header: A react native component that can hide navigator bar when user swipe list.
https://github.com/fengliu222/react-native-swipe-hidden-header
発生していたエラーは「TypeError: Cannot read property ‘func’ of undefined, js engine: hermes」です。
こちらのエラーメッセージを検索したところ、PropTypes
のエラーであることが分かりました。
参考にさせていただいた記事はこちら。
障害メモ/PropTypes.funcが見つからない – ポケットがチケットでいっぱい(アーカイブ)
https://fukuchiharuki.me/static/pukiwikidump/page/障害メモ/PropTypes.funcが見つからない.html
上記の記事によると、React.PropTypes
が非推奨になったため、prop-types
を使うように修正する必要があるとのこと。
「react-native-swipe-hidden-header」ライブラリの中を見てみると、下記のような記述がありました。
import React, { PropTypes } from 'react';
エラーの原因はこれでした。
そのため、下記のように PropTypes
を react
からインポートするのではなく、prop-types
からインポートするように書き換えます。
import React from 'react'; import PropTypes from 'prop-types';
なお、まだ prop-types
をインストールしていない場合は、下記コマンドを実行してライブラリをインストールしてください。
npm install --save prop-types
修正する箇所は以上です。
が、ライブラリの中身を変えるのはどうなんでしょう…。
あとは、動作確認として GitHub のサンプルコードをそのまま転載し、アプリを実行したところ、下にスクロールするとヘッダーが非表示になるページを実装できました!
<SwipeHiddenHeader header={()=> <View style={styles.header}><Text style={styles.headerText}>Custom</Text></View>} renderScrollComponent={()=> <FlatList data={[{key: 'a'},{key: '2'},{key: '2a'},{key: '3a'},{key: 'a4'},{key: 'a1'}, {key: 'b'}, {key: 'b2'}, {key: 'b3'}, {key: 'b1'}]} renderItem={(item)=> <TouchableOpacity onPress={()=> props.changeType('normal')} style={styles.block}><Text>Tap here to Custom list view</Text></TouchableOpacity>} />}> </SwipeHiddenHeader>
しかし、上記のコードから現在開発中のアプリのデータと見た目に合わせようと書き換えたところ、ヘッダーが非表示になる機能が動作しなくなりました…。
これはおそらく、実装したいページがヘッダーと FlatList
だけではなく、他にもダイアログなどを表示していて、サンプルコードよりも複雑なページだったためと思われます。
その後も色々いじってみましたが、結局ちゃんと動作しませんでした…。
ということで、こちらのライブラリの導入は、本格的に見合わせることにしました。
……個人的には、ここまで分かったので、むしろ諦めがつきました。
調べてみたところ、このライブラリを使わずに実装している記事も見つけたので、そちらを参考にしてもいいかもしれません。
とにかく、これ以外のライブラリまたはサンプルコードがないか、調べてみたいと思います。
以上、React Native の「react-native-swipe-hidden-header」ライブラリ導入時に発生したエラーの対処方法についてでした。
ご参考になれば幸いです。