2016-08-06 4 views
6

iOSでウェブビューを表示するために、現在React Nativeプロジェクトでreact-native-safari-viewモジュールを使用しています。React NativeのiOS専用のモジュールを必要とすることはできますか?

私はAndroidのためのプロジェクトをビルドしようとすると、モジュールがまだ、Androidのために実装されていないとして、それは私にこの行でエラーを与える:

import SafariView from 'react-native-safari-view' 

私は、Android用のLinkingライブラリを使用するつもりですしかし、私は2つのプラットフォームで同じコードを使う方法を知らない。

私が試した:

if (Platform.OS == 'ios') { 
    import SafariView from 'react-native-safari-view' 
} 

をそして、それは私に、このエラーを与える:

import' and 'export' may only appear at the top level

私はこの問題を回避するにはどうすればよいですか?

答えて

3

2つの異なるファイルyour_file_name.android.jsyour_file_name.ios.jsを作成することによって、プラットフォームコードを分離することができます。したがって、SafariViewを使用するファイル用に2つのバージョンを作成するか、SafariViewのラッパーを作成して、このモジュールをiOS上にエクスポートし、AndroidのダミーオブジェクトとしてPlatform.OSチェックで使用します。私が代わりにrequireを使用して(ただし、主に、モジュールではなく、コンポーネントのために)されているこの問題を回避するには

4

:この特定の状況では

var SafariView; 

if (Platform.OS == 'ios') { 
    SafariView = require('react-native-safari-view'); 
} 

私は間違いなく、コンスタンチン・クズネツォフのアプローチのために行くだろう - ちょうどそれとして、ここではこれを貼り付けます別のファイルを持つラッパーコンポーネントを作成することが過度になる可能性があります。

+1

私は追加する必要がありました私の場合は '.default'をインポートの最後に追加します。この場合、次のようになります: 'SafariView = require( 'react-native-safari-view')。デフォルト;' –

3

プラットフォーム固有のコードが複雑な場合は、コードを別々のファイルに分割することを検討する必要があります。 React Nativeは、ファイルに.iosがあるときを検出します。または.android。他のコンポーネントから必要に応じて該当するプラットフォームファイルをロードします。たとえば、あなたのプロジェクトでは、以下のファイルを持っている

を言う:

BigButton.ios.js 
BigButton.android.js 

次のようにあなたは、コンポーネントを必要とすることができます

import BigButton from './BigButton' 

参照 https://facebook.github.io/react-native/docs/platform-specific-code.html#platform-specific-extensions

関連する問題