Могу ли я потребовать модуль специально для iOS в React Native?

Я сейчас пользуюсьreact-native-safari-view модуль в моем проекте React Native для отображения веб-представлений в iOS.

Поскольку модуль еще не реализован для Android, при попытке создать проект для Android он выдает ошибку в этой строке:

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

Я собираюсь использоватьLinking библиотека для Android, но я не знаю, как использовать один и тот же код для двух платформ.

Я старался:

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

И это дает мне эту ошибку:

import 'и' export 'могут появляться только на верхнем уровне

Как мне обойти это?

Ответы на вопрос(3)

Чтобы обойти это, я использовалrequire вместо этого (но в основном для модулей, а не компонентов):

var SafariView;

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

В этой конкретной ситуации я бы определенно остановился на подходе Константина Кузнецова - просто придерживайтесь этого здесь, поскольку это может помочь кому-то еще, когда создание компонента-оболочки с отдельными файлами может быть излишним :)

 Chris Edwards02 нояб. 2017 г., 11:37
Я должен был добавить.default до конца импорта в моем случае. В этом случае это будет:SafariView = require('react-native-safari-view').default;
 Bikram Thapa03 мар. 2019 г., 18:27
но я не смог добиться этого с помощью var BackgroundTimer; if (Platform.OS == 'ios') {BackgroundTimer = require ('response-native-background-timer'). default; } error say ... timeout не определен при использовании .... const timeoutId = BackgroundTimer.setTimeout (() => {

вам следует рассмотреть возможность разделения кода на отдельные файлы. React Native обнаружит, когда у файла есть .ios. или .android. расширение и загрузка файла платформы r, если это требуется от других компонентов.

Например, скажем, у вас есть следующие файлы в вашем проекте:

BigButton.ios.js
BigButton.android.js

Затем вы можете потребовать компонент следующим образом:

import BigButton from './BigButton'

ссылкаhttps://facebook.github.io/react-native/docs/platform-specific-code.html#platform-specific-extensions

your_file_name.android.js а такжеyour_file_name.ios.js, Таким образом, вы можете создать две версии для файла, который вы хотите использоватьSafariView или вы можете создать обертку вокругSafariView который будет экспортировать этот модуль на iOS и фиктивный объект на Android, а затем использовать эту оболочку сPlatform.OS чеки.

Ваш ответ на вопрос