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

реагировать-родной и подержанныйcreate-react-native-app сделать леса для моего первого приложения. Это сделалоApp.js который, я думаю, эквивалентен большинству приложенийindex.js и служит точкой входа в мое приложение.

Глядя на множество уроков, я вижу отдельныеindex.ios.js а такжеindex.android.js файлы. Я не понимаю, почему эти приложения имеют отдельные файлы для каждой платформы.

Я вижу изэтот вопрос что есть даже гибридные приложения, которые используют как отдельные файлы, а также одинindex.js.

Все эти разные варианты меня смущают. Какие ситуации потребовали бы использования отдельных файлов против одной точки входа?

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

index.js будет работать на обеих платформах.index.ios.js будет работать только на устройствах iOS, покаindex.android.js работает только на устройствах Android.

Если у вас есть представление, которое будет выглядеть одинаково на обоих устройствах, и любые зависимости, которые вы запускали на обеих платформах одинаково, пропустите спецификатор платформы.

Однако, если представление должно выглядеть немного по-разному на двух платформах (возможно, для соблюдения различных стандартов проектирования на двух платформах) или вам нужно использовать разные зависимости на двух платформах, тогда вам нужно использовать спецификаторы.

Имея некоторые компоненты просто.js и другие будут.io.js или же.android.js он позволяет вам консолидировать код там, где это возможно, и в то же время при необходимости делать выбор для конкретной платформы.

Следует отметить, что спецификаторы платформы могут использоваться с любым компонентом, а не только с индексными файлами. (то есть вы можете иметьMyCoolButton.js который будет использоваться на обеих платформах иMyRegularButton.ios.js и MyRegularButton.android.js`, каждый из которых будет автоматически использоваться на соответствующей платформе.)

https://github.com/react-community/create-react-native-app вы будете знать, что create-реакции-native-приложение является продуктом Expo. Все ваше приложение компилируется на серверах Expo и index.android.js и index.ios.js, расположенных там.

Если вы хотите изменить файлы платформы, вам нужно запустить

npm run eject

После этого вы получите сырой реактивный проект со всеми зависимостями (npm, cocoapods ,act-native модули) и, конечно, index.android.js и index.ios.js

С точки зрения настройки, приложение «родная реакция» позволяет легко и быстро начать работу. Настроив более сложные представления, вы обнаружите, что вам нужно иметь отдельное представление для ios и Android.

Если вы хорошо структурируете свое приложение, вы можете разделить логику на один файл, а затем иметь отдельный вид для ios, Android и даже для веба. По сути, написание 1 приложения для 3 платформ.

так что да, вы можете собрать все в index.js и подойдет для большинства случаев.

Если у вас есть определенные стили или вы используете некоторые компоненты, которые имеют только специфические для платформы функции, вы можете использовать теги .ios или .android, чтобы помочь в этом, чтобы он поместил эти строительные леса туда.

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

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

которые должны быть написаны по-разному в android и iOS. Например, компонент Picker в React Native работает по-разному в iOS и Android. Разделив код, вы можете легко разделить код и поддерживать его. При запуске React Native определит, какой файл использовать автоматически, в зависимости от платформы, на которой работает приложение.

Источник:https://facebook.github.io/react-native/releases/0.26/docs/platform-specific-code.html

Решение Вопроса

пользования отдельных файлов против одной точки входа?

До сих пор я не нашел необходимости иметь разные входные файлыindex.ios.js а такжеindex.android.js, Первое, что я делаю, и то, что, похоже, делает большинство людей, - это добавляю что-то вроде следующегооба файла.

import { AppRegistry } from 'react-native'
import App from './App/Containers/App'

AppRegistry.registerComponent('YourAppName', () => App)

Вы также можете удалить их обоих, заменив их однимindex.js файл и приведенный выше код, а также. Не уверен, почему больше людей (включая меня) не делают этого.

Я думаю, что вы можете безопасно следовать этой схеме, пока не обнаружите, что вам нужно разделить свою логику между платформами. Даже если вы это сделаете, я думаю, вы вряд ли когда-нибудь отделите его от самого файла ввода. Скорее всего, вам придется разделить логику дальше в ваших конечных узлах.

Когда вам нужно написатькод для конкретной платформы, вы можете сделать это встроенным с помощьюPlatform модуль.

import { Platform, StyleSheet } from 'react-native';

const styles = StyleSheet.create({
  height: (Platform.OS === 'ios') ? 200 : 100,
});

Или жеPlatform.select

import {Platform, StyleSheet} из'act-native ';

const styles = StyleSheet.create({
  container: {
    flex: 1,
    ...Platform.select({
      ios: {
        backgroundColor: 'red',
      },
      android: {
        backgroundColor: 'blue',
      },
    }),
  },
});

который вы также можете использовать, чтобы выбрать правильный компонент ...

const Component = Platform.select({
  ios: () => require('ComponentIOS'),
  android: () => require('ComponentAndroid'),
})();

<Component />;

Последний пример может быть выполнен с помощью соглашения об именовании файлов. Например, если у вас есть следующие два файла компонентов ...

|- Component.ios.js
|- Component.android.js

и в вашем файле вы просто требуетеComponent в качестве таких...

import Component from './Component';

И упаковщик будет импортировать соответствующий компонент на основе.ios или же.android немного.

 MarksCode04 окт. 2017 г., 18:04
Спасибо! Это именно то, что я искал. У меня было ощущение, что обычно единственный раз, когда вы разделяете логику, это компоненты, а не корень, поэтому две разные точки входа смутили меня.
 MarksCode05 окт. 2017 г., 19:33
Похоже, я опередил свое время!
 Chris Geirman05 окт. 2017 г., 16:11
Рад, что помог! Стоит отметить, что вчераReact Native v0.49 был выпущен, что устраняет два входных файла в пользу одного index.js. (6e99e31)

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