2016-08-06 12 views
6

Obecnie używam modułu react-native-safari-view w moim projekcie React Native do wyświetlania widoków WWW w systemie iOS.Czy w trybie React Native mogę wymagać modułu specjalnie dla systemu iOS?

Ponieważ moduł nie jest jeszcze zaimplementowana dla Androida, gdy próbuję zbudować projekt dla Androida, to daje mi błąd na tej linii:

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

mam zamiar użyć Linking bibliotekę dla Androida , ale nie wiem, jak użyć tego samego kodu dla dwóch platform.

Próbowałem:

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

I to daje mi ten błąd:

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

Jak to obejść?

Odpowiedz

3

Można rozdzielić kod platformy, tworząc dwa różne pliki: your_file_name.android.js i your_file_name.ios.js. Możesz więc utworzyć dwie wersje dla pliku, w którym chcesz użyć SafariView lub możesz utworzyć opakowanie o numerze SafariView, które wyeksportuje ten moduł na iOS i obiekt obojętny na Androida, a następnie użyje tego opakowania z kontrolami Platform.OS.

4

Aby obejść ten problem Używam require zamiast (ale głównie dla modułów zamiast komponentów):

var SafariView; 

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

Dla tej szczególnej sytuacji na pewno tam na podejściu Konstantin Kuzniecow za - Wystarczy trzymać to tutaj jak to może pomóc komuś innemu, gdy tworzenie komponentu opakowania z osobnymi plikami może być przesadzone :)

+1

musiałem dodać '.default' na końcu importu w moim przypadku. W tym przypadku byłaby to: 'SafariView = require ('React-native-safari-view'). Default;' –

3

Kod specyficzny dla platformy jest bardziej złożony, należy rozważyć podział kodu na osobne pliki. React Native wykrywa, kiedy plik ma .ios. lub .android. rozszerzenie i załaduj odpowiedni plik platformy, gdy jest to wymagane, z innych komponentów.

Załóżmy, że masz następujące pliki w projekcie:

BigButton.ios.js 
BigButton.android.js 

Następnie można wymagać składnika w następujący sposób:

import BigButton from './BigButton' 

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

Powiązane problemy