Учебники

React Native — Краткое руководство

React Native — Обзор

Для лучшего понимания концепций React Native мы заимствуем несколько строк из официальной документации —

React Native позволяет создавать мобильные приложения, используя только JavaScript. Он использует тот же дизайн, что и React, позволяя создавать богатый мобильный интерфейс из декларативных компонентов. С React Native вы не создаете мобильное веб-приложение, приложение HTML5 или гибридное приложение; Вы создаете настоящее мобильное приложение, которое неотличимо от приложения, созданного с использованием Objective-C или Java. React Native использует те же основные строительные блоки пользовательского интерфейса, что и обычные приложения для iOS и Android. Вы просто соединяете эти строительные блоки, используя JavaScript и React.

Реагировать на нативные особенности

Ниже приведены особенности React Native —

  • React — это платформа для создания веб и мобильных приложений с использованием JavaScript.

  • Собственный — вы можете использовать нативные компоненты, управляемые JavaScript.

  • Платформы — React Native поддерживает платформы IOS и Android.

React — это платформа для создания веб и мобильных приложений с использованием JavaScript.

Собственный — вы можете использовать нативные компоненты, управляемые JavaScript.

Платформы — React Native поддерживает платформы IOS и Android.

Реагируйте на собственные преимущества

Ниже приведены преимущества React Native —

  • JavaScript — вы можете использовать существующие знания JavaScript для создания собственных мобильных приложений.

  • Совместное использование кода — Вы можете поделиться большей частью своего кода на разных платформах.

  • Сообщество . Сообщество вокруг React и React Native большое, и вы сможете найти любой ответ, который вам нужен.

JavaScript — вы можете использовать существующие знания JavaScript для создания собственных мобильных приложений.

Совместное использование кода — Вы можете поделиться большей частью своего кода на разных платформах.

Сообщество . Сообщество вокруг React и React Native большое, и вы сможете найти любой ответ, который вам нужен.

Реагируйте на собственные ограничения

Ниже приведены ограничения React Native —

  • Нативные компоненты — если вы хотите создать нативную функциональность, которая еще не создана, вам нужно написать некоторый код для конкретной платформы.

Нативные компоненты — если вы хотите создать нативную функциональность, которая еще не создана, вам нужно написать некоторый код для конкретной платформы.

React Native — Настройка среды

Есть несколько вещей, которые вам нужно установить, чтобы настроить среду для React Native. Мы будем использовать OSX в качестве нашей строительной платформы.

Sr.No. Программного обеспечения Описание
1 NodeJS и NPM Вы можете следовать нашему руководству по установке среды NodeJS, чтобы установить NodeJS.

Шаг 1. Установите create-реагировать-нативное приложение

После успешной установки NodeJS и NPM в вашей системе вы можете приступить к установке create-реагировать-native-app (глобально, как показано ниже).

C:\Users\Tutorialspoint> npm install -g create-react-native-app

Шаг 2: Создать проект

Просмотрите нужную папку и создайте новый собственный реактивный проект, как показано ниже.

C:\Users\Tutorialspoint>cd Desktop
C:\Users\Tutorialspoint\Desktop>create-react-native-app MyReactNative

После выполнения вышеупомянутой команды создается папка с указанным именем со следующим содержимым.

Экологический проект

Шаг 3: NodeJS Python Jdk8

Убедитесь, что в вашей системе установлены Python NodeJS и jdk8, если нет, установите их. В дополнение к этому рекомендуется установить последнюю версию пряжи, чтобы избежать определенных проблем.

Шаг 4: Установите React Native CLI

Вы можете установить собственный интерфейс командной строки реагировать на npm, используя команду install -g Reaction-native-cli, как показано ниже.

npm install -g react-native-cli

Окружение командной строки

Шаг 5: Начните реагировать на родную

Чтобы проверить установку, просмотрите папку проекта и попробуйте запустить проект с помощью команды запуска.

C:\Users\Tutorialspoint\Desktop>cd MyReactNative
C:\Users\Tutorialspoint\Desktop\MyReactNative>npm start

Если все прошло хорошо, вы получите QR-код, как показано ниже.

Установщик пакета среды

Как указано в инструкции, один из способов запуска собственных приложений на вашем Android-устройстве — это использование expo. Установите клиент expo в своем устройстве Android и отсканируйте полученный выше QR-код.

Шаг 6: Извлечь проект

Если вы хотите запустить эмулятор Android с помощью Android Studio, выйдите из текущей командной строки, нажав Ctrl + C.

Затем выполните команду run eject как

npm run eject

Это предложит вам варианты для извлечения, выберите первый с помощью стрелок и нажмите Enter.

Команда извлечения среды

Затем вы должны предложить название приложения на домашнем экране и название проекта для студии Android и проектов Xcode.

Вопросы о командах извлечения среды

Хотя ваш проект был успешно удален, вы можете получить ошибку как —

Ошибка извлечения среды

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

react-native run-android

Но перед этим нужно установить андроид студию.

Шаг 7: Установка Android Studio

Посетите веб-страницу https://developer.android.com/studio/ и загрузите Android-студию.

Среда Android Studio

После загрузки установочного файла дважды щелкните по нему и продолжите установку.

Среда Android Studio3

Шаг 8: Настройка AVD Manager

Для настройки AVD Manager нажмите на соответствующий значок в строке меню.

Настройка AVD Manager

Шаг 9: Настройка AVD Manager

Выберите определение устройства, рекомендуется Nexus 5X.

Выберите определение устройства

Нажмите на кнопку Далее, вы увидите окно образа системы. Выберите вкладку x86 Images .

Системный образ

Затем выберите Зефир и нажмите кнопку Далее.

Выберите образ системы

Наконец, нажмите кнопку Готово, чтобы завершить настройку AVD.

Проверьте конфигурацию

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

Ваши виртуальные устройства

Шаг 10: Запуск Android

Откройте командную строку, просмотрите папку вашего проекта и выполните командуact-native run-android .

Работает Android

Затем выполнение вашего приложения начинается в другом приглашении, вы можете увидеть его статус.

Статус выполнения

В вашем эмуляторе Android вы можете увидеть выполнение приложения по умолчанию как —

Приложение React Native Default

Шаг 11: местные.свойства

Откройте папку android в папке вашего проекта SampleReactNative / android (в данном случае). Создайте файл с именем local.properties и добавьте в него следующий путь.

sdk.dir = /C:\\Users\\Tutorialspoint\\AppData\\Local\\Android\\Sdk

здесь замените Tutorialspoint вашим именем пользователя.

Шаг 12: Горячая перезагрузка

А для сборки приложения измените App.js и изменения будут автоматически обновлены на эмуляторе Android.

Если нет, нажмите на эмуляторе Android, нажмите Ctrl + M, затем выберите параметр Включить горячую перезагрузку .

Окружающая среда Горячая перезагрузка

React Native — приложение

Если вы откроете приложение по умолчанию, вы увидите, что файл app.js выглядит

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';

export default class App extends React.Component {
   render() {
      return (
         <View style = {styles.container}>
            <Text>Open up App.js to start working on your app!</Text>
            <Text>Changes you make will automatically reload.</Text>
            <Text>Shake your phone to open the developer menu.</Text>
         </View>
      );
   }
}

const styles = StyleSheet.create({
   container: {
      flex: 1,
      backgroundColor: '#fff',
      alignItems: 'center',
      justifyContent: 'center',
   },
});

Выход

Работает над приложением

Привет, мир

Чтобы отобразить простое сообщение с надписью «Welcome to Tutorialspoint», удалите часть CSS и вставьте печатное сообщение, заключенное в теги <text> </ text> внутри <view> </ view>, как показано ниже.

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';

export default class App extends React.Component {
   render() {
      return (
         <View>
            <Text>Welcome to Tutorialspoint</Text>
         </View>
      );
   }
}

Привет, мир

Реагировать Родной — Государство

Данные внутри React Components управляются состоянием и реквизитом . В этой главе мы поговорим о состоянии .

Разница между состоянием и реквизитом

Состояние изменчиво, в то время как реквизит неизменен. Это означает, что состояние может быть обновлено в будущем, в то время как реквизиты не могут быть обновлены.

Использование State

Это наш корневой компонент. Мы просто импортируем Home, который будет использоваться в большинстве глав.

App.js

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';

export default class App extends React.Component {
   state = {
      myState: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, used do eiusmod
      tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
      nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
      Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
      fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
      culpa qui officia deserunt mollit anim id est laborum.'
   }
   render() {
      return (
      <View>
         <Text> {this.state.myState} </Text>
      </View>
      );
   }
}

Мы можем видеть в эмуляторе текст из состояния, как на следующем скриншоте.

Реагировать родное государство

Обновление состояния

Поскольку состояние является изменяемым, мы можем обновить его, создав функцию deleteState и вызывая ее, используя событие onPress = {this.deleteText} .

Home.js

import React, { Component } from 'react'
import { Text, View } from 'react-native'

class Home extends Component {
   state = {
      myState: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed 
         do eiusmod tempor incididunt ut labore et dolore magna aliqua.
         Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi
         ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit 
         in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
         Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
         deserunt mollit anim id est laborum.'
   }
   updateState = ()  this.setState({ myState: 'The state is updated' })
   render() {
      return (
         <View>
            <Text onPress = {this.updateState}>
               {this.state.myState}
            </Text>
         </View>
      );
   }
}
export default Home;

ЗАМЕЧАНИЯ. Во всех главах мы будем использовать синтаксис класса для компонентов с состоянием (контейнер) и синтаксис функции для компонентов без состояния (презентация). Мы узнаем больше о компонентах в следующей главе.

Мы также узнаем, как использовать синтаксис функции стрелки для updateState . Следует помнить, что в этом синтаксисе используется лексическая область, и это ключевое слово будет связано с объектом среды (Class). Это иногда приводит к неожиданному поведению.

Другой способ определения методов — использовать функции EC5, но в этом случае нам нужно будет связать это вручную в конструкторе. Рассмотрим следующий пример, чтобы понять это.

class Home extends Component {
   constructor() {
      super()
      this.updateState = this.updateState.bind(this)
   }
   updateState() {
      //
   }
   render() {
      //
   }
}

React Native — Реквизит

В нашей последней главе мы показали вам, как использовать изменяемое состояние . В этой главе мы покажем вам, как сочетать состояние и реквизит .

Презентационные компоненты должны получать все данные, передавая реквизит . Только компоненты контейнера должны иметь состояние .

Контейнер Компонент

Теперь мы поймем, что такое контейнерный компонент, а также как он работает.

теория

Теперь мы обновим наш контейнерный компонент. Этот компонент будет обрабатывать состояние и передавать реквизиты в презентационный компонент.

Контейнерный компонент используется только для обработки состояния. Все функциональные возможности, относящиеся к представлению (стилизация и т. Д.), Будут обрабатываться в компоненте представления.

пример

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

Давайте рассмотрим код в приведенном ниже примере. Мы импортируем PresentationalComponent и передадим его в функцию рендеринга.

После того, как мы импортируем PresentationalComponent и передадим его в функцию рендеринга, нам нужно передать реквизиты. Мы передадим реквизиты, добавив myText = {this.state.myText} и deleteText = {this.deleteText} в <PresentationalComponent> . Теперь мы сможем получить доступ к этому внутри презентационного компонента.

App.js

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import PresentationalComponent from './PresentationalComponent'

export default class App extends React.Component {
   state = {
      myState: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, used do eiusmod
      tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
      nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
      aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat
      nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
      officia deserunt mollit anim id est laborum.'
   }
   updateState = () => {
      this.setState({ myState: 'The state is updated' })
   }
   render() {
      return (
         <View>
            <PresentationalComponent myState = {this.state.myState} updateState = {this.updateState}/>
         </View>
      );
   }
}

Презентационный компонент

Теперь мы поймем, что такое презентационный компонент, а также как он работает.

теория

Компоненты представления должны использоваться только для представления представления пользователям. Эти компоненты не имеют состояния. Они получают все данные и функции в качестве реквизита.

Лучше всего использовать как можно больше презентационных компонентов.

пример

Как мы упоминали в нашей предыдущей главе, мы используем синтаксис функции EC6 для презентационных компонентов.

Наш компонент будет получать реквизиты, возвращать элементы представления, представлять текст с помощью {props.myText} и вызывать функцию {props.deleteText}, когда пользователь нажимает на текст.

PresentationalComponent.js

import React, { Component } from 'react'
import { Text, View } from 'react-native'

const PresentationalComponent = (props) => {
   return (
      <View>
         <Text onPress = {props.updateState}>
            {props.myState}
         </Text>
      </View>
   )
}
export default PresentationalComponent

Теперь у нас есть та же функциональность, что и в нашей главе « Состояние» . Единственное отличие состоит в том, что мы реорганизовали наш код в контейнер и презентационный компонент.

Вы можете запустить приложение и увидеть текст, как на следующем скриншоте.

Реагировать родной реквизит

Если вы нажмете на текст, он будет удален с экрана.

React Native Props обновлен

React Native — Styling

Есть несколько способов стилизовать ваши элементы в React Native.

Вы можете использовать свойство style для добавления встроенных стилей. Тем не менее, это не лучшая практика, потому что это может быть трудно читать код.

В этой главе мы будем использовать таблицу стилей для стилизации.

Контейнер Компонент

В этом разделе мы упростим наш контейнерный компонент из нашей предыдущей главы.

App.js

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import PresentationalComponent from './PresentationalComponent'

export default class App extends React.Component {
   state = {
      myState: 'This is my state'
   }
   render() {
      return (
         <View>
            <PresentationalComponent myState = {this.state.myState}/>
         </View>
      );
   }
}

Презентационный компонент

В следующем примере мы импортируем таблицу стилей . В нижней части файла мы создадим нашу таблицу стилей и присвоим ее константе стилей . Обратите внимание, что наши стили находятся в camelCase, и мы не используем px или% для стилизации.

Чтобы применить стили к нашему тексту, нам нужно добавить свойство style = {styles.myText} к элементу Text .

PresentationalComponent.js

import React, { Component } from 'react'
import { Text, View, StyleSheet } from 'react-native'

const PresentationalComponent = (props) => {
   return (
      <View>
         <Text style = {styles.myState}>
            {props.myState}
         </Text>
      </View>
   )
}
export default PresentationalComponent

const styles = StyleSheet.create ({
   myState: {
      marginTop: 20,
      textAlign: 'center',
      color: 'blue',
      fontWeight: 'bold',
      fontSize: 20
   }
})

Когда мы запустим приложение, мы получим следующий вывод.

React Native — Flexbox

Для поддержки разных размеров экрана React Native предлагает поддержку Flexbox .

Мы будем использовать тот же код, который мы использовали в нашей главе React Native — Styling . Мы только изменим PresentationalComponent .

раскладка

Для достижения желаемого макета, flexbox предлагает три основных свойства — flexDirection justifyContent и alignItems .

В следующей таблице показаны возможные варианты.

Имущество Ценности Описание
flexDirection ‘колонка ряд’ Используется для указания того, будут ли элементы выровнены по вертикали или по горизонтали.
justifyContent ‘center’, ‘flex-start’, ‘flex-end’, ‘space-around’, ‘space -ween’ Используется для определения того, как следует распределять элементы внутри контейнера.
alignItems ‘center’, ‘flex-start’, ‘flex-end’, ‘вытянутый’ Используется для определения того, как элементы должны распределяться внутри контейнера вдоль вторичной оси (противоположно flexDirection)

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

App.js

import React, { Component } from 'react'
import { View, StyleSheet } from 'react-native'

const Home = (props) => {
   return (
      <View style = {styles.container}>
         <View style = {styles.redbox} />
         <View style = {styles.bluebox} />
         <View style = {styles.blackbox} />
      </View>
   )
}

export default Home

const styles = StyleSheet.create ({
   container: {
      flexDirection: 'column',
      justifyContent: 'center',
      alignItems: 'center',
      backgroundColor: 'grey',
      height: 600
   },
   redbox: {
      width: 100,
      height: 100,
      backgroundColor: 'red'
   },
   bluebox: {
      width: 100,
      height: 100,
      backgroundColor: 'blue'
   },
   blackbox: {
      width: 100,
      height: 100,
      backgroundColor: 'black'
   },
})

Выход

React Native Flexbox Center

Если элементы необходимо переместить вправо и между ними необходимо добавить пробелы, то мы можем использовать следующий код.

App.js

import React, { Component } from 'react'
import { View, StyleSheet } from 'react-native'

const App = (props) => {
   return (
      <View style = {styles.container}>
         <View style = {styles.redbox} />
         <View style = {styles.bluebox} />
         <View style = {styles.blackbox} />
      </View>
   )
}

export default App

const styles = StyleSheet.create ({
   container: {
      flexDirection: 'column',
      justifyContent: 'space-between',
      alignItems: 'flex-end',
      backgroundColor: 'grey',
      height: 600
   },
   redbox: {
      width: 100,
      height: 100,
      backgroundColor: 'red'
   },
   bluebox: {
      width: 100,
      height: 100,
      backgroundColor: 'blue'
   },
   blackbox: {
      width: 100,
      height: 100,
      backgroundColor: 'black'
   },
})

React Native Flexbox Right

React Native — ListView

В этой главе мы покажем вам, как создать список в React Native. Мы импортируем List в наш Home компонент и покажем его на экране.

App.js

import React from 'react'
import List from './List.js'

const App = () => {
   return (
      <List />
   )
}
export default App

Для создания списка мы будем использовать метод map () . Это будет перебирать массив элементов и отображать каждый из них.

List.js

import React, { Component } from 'react'
import { Text, View, TouchableOpacity, StyleSheet } from 'react-native'
   
class List extends Component {
   state = {
      names: [
         {
            id: 0,
            name: 'Ben',
         },
         {
            id: 1,
            name: 'Susan',
         },
         {
            id: 2,
            name: 'Robert',
         },
         {
            id: 3,
            name: 'Mary',
         }
      ]
   }
   alertItemName = (item) => {
      alert(item.name)
   }
   render() {
      return (
         <View>
            {
               this.state.names.map((item, index) => (
                  <TouchableOpacity
                     key = {item.id}
                     style = {styles.container}
                     onPress = {() => this.alertItemName(item)}>
                     <Text style = {styles.text}>
                        {item.name}
                     </Text>
                  </TouchableOpacity>
               ))
            }
         </View>
      )
   }
}
export default List

const styles = StyleSheet.create ({
   container: {
      padding: 10,
      marginTop: 3,
      backgroundColor: '#d9f9b1',
      alignItems: 'center',
   },
   text: {
      color: '#4f603c'
   }
})

Когда мы запустим приложение, мы увидим список имен.

Посмотреть список

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

Реагировать на собственный ListView

React Native — ввод текста

В этой главе мы покажем вам, как работать с элементами TextInput в React Native.

Компонент Home будет импортировать и отображать входные данные.

App.js

import React from 'react';
import Inputs from './inputs.js'

const App = () => {
   return (
      <Inputs />
   )
}
export default App

входные

Мы определим начальное состояние.

После определения начального состояния мы создадим функции handleEmail и handlePassword . Эти функции используются для обновления состояния.

Функция login () просто оповестит текущее значение состояния.

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

inputs.js

import React, { Component } from 'react'
import { View, Text, TouchableOpacity, TextInput, StyleSheet } from 'react-native'

class Inputs extends Component {
   state = {
      email: '',
      password: ''
   }
   handleEmail = (text) => {
      this.setState({ email: text })
   }
   handlePassword = (text) => {
      this.setState({ password: text })
   }
   login = (email, pass) => {
      alert('email: ' + email + ' password: ' + pass)
   }
   render() {
      return (
         <View style = {styles.container}>
            <TextInput style = {styles.input}
               underlineColorAndroid = "transparent"
               placeholder = "Email"
               placeholderTextColor = "#9a73ef"
               autoCapitalize = "none"
               onChangeText = {this.handleEmail}/>
            
            <TextInput style = {styles.input}
               underlineColorAndroid = "transparent"
               placeholder = "Password"
               placeholderTextColor = "#9a73ef"
               autoCapitalize = "none"
               onChangeText = {this.handlePassword}/>
            
            <TouchableOpacity
               style = {styles.submitButton}
               onPress = {
                  () => this.login(this.state.email, this.state.password)
               }>
               <Text style = {styles.submitButtonText}> Submit </Text>
            </TouchableOpacity>
         </View>
      )
   }
}
export default Inputs

const styles = StyleSheet.create({
   container: {
      paddingTop: 23
   },
   input: {
      margin: 15,
      height: 40,
      borderColor: '#7a42f4',
      borderWidth: 1
   },
   submitButton: {
      backgroundColor: '#7a42f4',
      padding: 10,
      margin: 15,
      height: 40,
   },
   submitButtonText:{
      color: 'white'
   }
})

Всякий раз, когда мы вводим одно из полей ввода, состояние будет обновляться. Когда мы нажимаем кнопку « Отправить» , текст из входных данных будет показан внутри диалогового окна.

Реагировать на собственный ввод текста

Всякий раз, когда мы вводим одно из полей ввода, состояние будет обновляться. Когда мы нажимаем кнопку « Отправить» , текст из входных данных будет показан внутри диалогового окна.

Реагировать на собственный ввод текста

React Native — ScrollView

В этой главе мы покажем вам, как работать с элементом ScrollView .

Мы снова создадим ScrollViewExample.js и импортируем его в Home .

App.js

import React from 'react';
import ScrollViewExample from './scroll_view.js';

const App = () => {
   return (
      <ScrollViewExample />
   )
}

Scrollview отобразит список имен. Мы создадим это в государстве.

ScrollView.js

import React, { Component } from 'react';
import { Text, Image, View, StyleSheet, ScrollView } from 'react-native';

class ScrollViewExample extends Component {
   state = {
      names: [
         {'name': 'Ben', 'id': 1},
         {'name': 'Susan', 'id': 2},
         {'name': 'Robert', 'id': 3},
         {'name': 'Mary', 'id': 4},
         {'name': 'Daniel', 'id': 5},
         {'name': 'Laura', 'id': 6},
         {'name': 'John', 'id': 7},
         {'name': 'Debra', 'id': 8},
         {'name': 'Aron', 'id': 9},
         {'name': 'Ann', 'id': 10},
         {'name': 'Steve', 'id': 11},
         {'name': 'Olivia', 'id': 12}
      ]
   }
   render() {
      return (
         <View>
            <ScrollView>
               {
                  this.state.names.map((item, index) => (
                     <View key = {item.id} style = {styles.item}>
                        <Text>{item.name}</Text>
                     </View>
                  ))
               }
            </ScrollView>
         </View>
      )
   }
}
export default ScrollViewExample

const styles = StyleSheet.create ({
   item: {
      flexDirection: 'row',
      justifyContent: 'space-between',
      alignItems: 'center',
      padding: 30,
      margin: 2,
      borderColor: '#2a4944',
      borderWidth: 1,
      backgroundColor: '#d2f7f1'
   }
})

Когда мы запустим приложение, мы увидим прокручиваемый список имен.

React Native — Изображения

В этой главе мы поймем, как работать с изображениями в React Native.

Добавление изображения

Давайте создадим новую папку img внутри папки src . Мы добавим наше изображение ( myImage.png ) в эту папку.

Мы будем показывать изображения на главном экране.

App.js

import React from 'react';
import ImagesExample from './ImagesExample.js'

const App = () => {
   return (
      <ImagesExample />
   )
}
export default App

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

image_example.js

import React, { Component } from 'react'
import { Image } from 'react-native'

const ImagesExample = () => (
   <Image source = {require('C:/Users/Tutorialspoint/Desktop/NativeReactSample/logo.png')} />
)
export default ImagesExample

Выход

Реагировать на собственные изображения

Плотность экрана

React Native предлагает способ оптимизации изображений для различных устройств с использованием суффикса @ 2x, @ 3x . Приложение загрузит только изображение, необходимое для определенной плотности экрана.

Ниже будут имена изображений в папке img .

my-image@2x.jpg
my-image@3x.jpg

Сетевые изображения

При использовании сетевых образов, вместо require , нам нужно свойство source . Рекомендуется определить ширину и высоту для сетевых изображений.

App.js

import React from 'react';
import ImagesExample from './image_example.js'

const App = () => {
   return (
      <ImagesExample />
   )
}
export default App

image_example.js

import React, { Component } from 'react'
import { View, Image } from 'react-native'

const ImagesExample = () => (
   <Image source = {{uri:'https://pbs.twimg.com/profile_images/486929358120964097/gNLINY67_400x400.png'}}
   style = {{ width: 200, height: 200 }}
   />
)
export default ImagesExample

Выход

Сетевые изображения

React Native — HTTP

В этой главе мы покажем вам, как использовать fetch для обработки сетевых запросов.

App.js

import React from 'react';
import HttpExample from './http_example.js'

const App = () => {
   return (
      <HttpExample />
   )
}
export default App

Используя Fetch

Мы будем использовать метод жизненного цикла componentDidMount для загрузки данных с сервера, как только компонент будет смонтирован. Эта функция отправляет GET-запрос на сервер, возвращает данные JSON, выводит журнал на консоль и обновляет наше состояние.

http_example.js

import React, { Component } from 'react'
import { View, Text } from 'react-native'

class HttpExample extends Component {
   state = {
      data: ''
   }
   componentDidMount = () => {
      fetch('https://jsonplaceholder.typicode.com/posts/1', {
         method: 'GET'
      })
      .then((response) => response.json())
      .then((responseJson) => {
         console.log(responseJson);
         this.setState({
            data: responseJson
         })
      })
      .catch((error) => {
         console.error(error);
      });
   }
   render() {
      return (
         <View>
            <Text>
               {this.state.data.body}
            </Text>
         </View>
      )
   }
}
export default HttpExample

Выход

Реагируйте на собственный HTTP

React Native — Кнопки

В этой главе мы покажем вам сенсорные компоненты в реакции Native. Мы называем их «сенсорными», потому что они предлагают встроенную анимацию, и мы можем использовать реквизит onPress для обработки сенсорных событий.

Facebook предлагает компонент Button , который можно использовать как общую кнопку. Рассмотрим следующий пример, чтобы понять то же самое.

App.js

import React, { Component } from 'react'
import { Button } from 'react-native'

const App = () => {
   const handlePress = () => false
   return (
      <Button
         onPress = {handlePress}
         title = "Red button!"
         color = "red"
      />
   )
}
export default App

Если компонент Button по умолчанию не соответствует вашим потребностям, вы можете использовать один из следующих компонентов.

Кнопки Redbutton

Непрозрачная Непрозрачность

Этот элемент изменит непрозрачность элемента при касании.

App.js

import React from 'react'
import { TouchableOpacity, StyleSheet, View, Text } from 'react-native'

const App = () => {
   return (
      <View style = {styles.container}>
         <TouchableOpacity>
            <Text style = {styles.text}>
               Button
            </Text>
         </TouchableOpacity>
      </View>
   )
}
export default App

const styles = StyleSheet.create ({
   container: {
      alignItems: 'center',
   },
   text: {
      borderWidth: 1,
      padding: 25,
      borderColor: 'black',
      backgroundColor: 'red'
   }
})

Кнопки Touchopacity

Touchable Highlight

Когда пользователь нажимает на элемент, он становится темнее, и основной цвет будет просвечивать.

App.js

import React from 'react'
import { View, TouchableHighlight, Text, StyleSheet } from 'react-native'

const App = (props) => {
   return (
      <View style = {styles.container}>
         <TouchableHighlight>
            <Text style = {styles.text}>
               Button
            </Text>
         </TouchableHighlight>
      </View>
   )
}
export default App

const styles = StyleSheet.create ({
   container: {
      alignItems: 'center',
   },
   text: {
      borderWidth: 1,
      padding: 25,
      borderColor: 'black',
      backgroundColor: 'red'
   }
})

Touchable Native Feedback

Это будет имитировать анимацию чернил при нажатии элемента.

App.js

import React from 'react'
import { View, TouchableNativeFeedback, Text, StyleSheet } from 'react-native'

const Home = (props) => {
   return (
      <View style = {styles.container}>
         <TouchableNativeFeedback>
            <Text style = {styles.text}>
               Button
            </Text>
         </TouchableNativeFeedback>
      </View>
   )
}
export default Home

const styles = StyleSheet.create ({
   container: {
      alignItems: 'center',
   },
   text: {
      borderWidth: 1,
      padding: 25,
      borderColor: 'black',
      backgroundColor: 'red'
   }
})

Touchable без обратной связи

Это следует использовать, когда вы хотите обработать сенсорное событие без какой-либо анимации. Обычно этот компонент используется мало.

<TouchableWithoutFeedback>
   <Text>
      Button
   </Text>
</TouchableWithoutFeedback>

React Native — Анимации

В этой главе мы покажем вам, как использовать LayoutAnimation в React Native.

Компонент анимации

Мы установим myStyle как свойство состояния. Это свойство используется для стилизации элемента внутри PresentationalAnimationComponent .

Мы также создадим две функции — expandElement и collapseElement . Эти функции будут обновлять значения из состояния. Первый будет использовать анимацию предустановки пружины, а второй будет иметь линейную предустановку. Мы также передадим это как реквизит. Кнопки « Развернуть» и « Свернуть» вызывают функции expandElement () и collapseElement () .

В этом примере мы будем динамически изменять ширину и высоту блока. Поскольку компонент Home будет таким же, мы изменим только компонент Animations .

В этом примере мы будем динамически изменять ширину и высоту блока. Поскольку компонент Home будет таким же, мы изменим только компонент Animations .

App.js

import React, { Component } from 'react'
import { View, StyleSheet, Animated, TouchableOpacity } from 'react-native'

class Animations extends Component {
   componentWillMount = () => {
      this.animatedWidth = new Animated.Value(50)
      this.animatedHeight = new Animated.Value(100)
   }
   animatedBox = () => {
      Animated.timing(this.animatedWidth, {
         toValue: 200,
         duration: 1000
      }).start()
      Animated.timing(this.animatedHeight, {
         toValue: 500,
         duration: 500
      }).start()
   }
   render() {
      const animatedStyle = { width: this.animatedWidth, height: this.animatedHeight }
      return (
         <TouchableOpacity style = {styles.container} onPress = {this.animatedBox}>
            <Animated.View style = {[styles.box, animatedStyle]}/>
         </TouchableOpacity>
      )
   }
}
export default Animations

const styles = StyleSheet.create({
   container: {
      justifyContent: 'center',
      alignItems: 'center'
   },
   box: {
      backgroundColor: 'blue',
      width: 50,
      height: 100
   }
})

React Native — Отладка

React native предлагает несколько методов, которые помогают в отладке вашего кода.

В меню разработчика приложений

Вы можете открыть меню разработчика на симуляторе IOS, нажав команду + D.

В эмуляторе Android вам нужно нажать команду + M.

React Native Debugging Developer Menu

  • Перезагрузка — Используется для перезагрузки симулятора. Вы можете использовать сочетание клавиш + R

  • Отладка JS Remotely — используется для активации отладки внутри консоли разработчика браузера.

  • Enable Live Reload — Используется для включения оперативной перезагрузки всякий раз, когда ваш код сохраняется. Отладчик откроется на локальном хосте: 8081 / debugger-ui .

  • Start Systrace — используется для запуска инструмента профилирования на основе маркеров Android.

  • Показать инспектор — используется для открытия инспектора, где вы можете найти информацию о ваших компонентах. Вы можете использовать комбинацию клавиш + I

  • Show Perf Monitor — Perf-монитор используется для отслеживания производительности вашего приложения.

Перезагрузка — Используется для перезагрузки симулятора. Вы можете использовать сочетание клавиш + R

Отладка JS Remotely — используется для активации отладки внутри консоли разработчика браузера.

Enable Live Reload — Используется для включения оперативной перезагрузки всякий раз, когда ваш код сохраняется. Отладчик откроется на локальном хосте: 8081 / debugger-ui .

Start Systrace — используется для запуска инструмента профилирования на основе маркеров Android.

Показать инспектор — используется для открытия инспектора, где вы можете найти информацию о ваших компонентах. Вы можете использовать комбинацию клавиш + I

Show Perf Monitor — Perf-монитор используется для отслеживания производительности вашего приложения.

React Native — Маршрутизатор

В этой главе мы разберем навигацию в React Native.

Шаг 1: Установите маршрутизатор

Для начала нам нужно установить роутер . Мы будем использовать React Native Router Flux в этой главе. Вы можете запустить следующую команду в терминале из папки проекта.

npm i react-native-router-flux --save

Шаг 2: все приложение

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

App.js

import React, { Component } from 'react';
import { AppRegistry, View } from 'react-native';
import Routes from './Routes.js'

class reactTutorialApp extends Component {
   render() {
      return (
         <Routes />
      )
   }
}
export default reactTutorialApp
AppRegistry.registerComponent('reactTutorialApp', () => reactTutorialApp)

Шаг 3: Добавить маршрутизатор

Теперь мы создадим компонент Routes внутри папки компонентов. Вернется роутер с несколькими сценами. Каждая сцена будет нуждаться в ключе, компоненте и заголовке . Маршрутизатор использует свойство ключа для переключения между сценами, компонент будет отображаться на экране, а заголовок будет отображаться на панели навигации. Мы также можем установить начальное свойство для сцены, которая должна отображаться изначально.

Routes.js

import React from 'react'
import { Router, Scene } from 'react-native-router-flux'
import Home from './Home.js'
import About from './About.js'

const Routes = () => (
   <Router>
      <Scene key = "root">
         <Scene key = "home" component = {Home} title = "Home" initial = {true} />
         <Scene key = "about" component = {About} title = "About" />
      </Scene>
   </Router>
)
export default Routes

Шаг 4: Создание компонентов

У нас уже есть компонент Home из предыдущих глав; Теперь нам нужно добавить компонент About . Мы добавим функции goToAbout и goToHome для переключения между сценами.

Home.js

import React from 'react'
import { TouchableOpacity, Text } from 'react-native';
import { Actions } from 'react-native-router-flux';

const Home = () => {
   const goToAbout = () => {
      Actions.about()
   }
   return (
      <TouchableOpacity style = {{ margin: 128 }} onPress = {goToAbout}>
         <Text>This is HOME!</Text>
      </TouchableOpacity>
   )
}
export default Home

About.js

import React from 'react'
import { TouchableOpacity, Text } from 'react-native'
import { Actions } from 'react-native-router-flux'

const About = () => {
   const goToHome = () => {
      Actions.home()
   }
   return (
      <TouchableOpacity style = {{ margin: 128 }} onPress = {goToHome}>
         <Text>This is ABOUT</Text>
      </TouchableOpacity>
   )
}
export default About

Приложение отобразит начальный экран.

React Native Router

Вы можете нажать кнопку, чтобы перейти к экрану «О программе». Появится стрелка назад; Вы можете использовать его, чтобы вернуться к предыдущему экрану.

React Native Router

React Native — Запуск IOS

Если вы хотите протестировать свое приложение в симуляторе IOS, все, что вам нужно, это открыть корневую папку вашего приложения в терминале и запустить —

react-native run-ios

Приведенная выше команда запустит симулятор и запустит приложение.

Мы также можем указать устройство, которое мы хотим использовать.

react-native run-ios --simulator "iPhone 5s

После того, как вы откроете приложение в симуляторе, вы можете нажать команду + D на IOS, чтобы открыть меню разработчиков. Вы можете проверить больше об этом в нашей главе отладки .

Вы также можете перезагрузить симулятор IOS, нажав команду + R.

React Native — работает под управлением Android

Мы можем запустить приложение React Native на платформе Android, запустив следующий код в терминале.

react-native run-android

Прежде чем вы сможете запустить свое приложение на устройстве Android, вам нужно включить отладку по USB в параметрах разработчика .

Когда отладка по USB включена, вы можете подключить устройство и запустить приведенный выше фрагмент кода.

Нативный эмулятор Android работает медленно. Мы рекомендуем скачать Genymotion для тестирования вашего приложения.

Доступ к меню разработчика можно получить, нажав команду + M.

React Native — Просмотр

Представление является наиболее распространенным элементом в React Native. Вы можете рассматривать его как эквивалент элемента div, используемого в веб-разработке.

Случаи применения

Давайте теперь посмотрим на несколько распространенных вариантов использования.

  • Когда вам нужно обернуть ваши элементы внутри контейнера, вы можете использовать View как элемент контейнера.

  • Если вы хотите вложить больше элементов в родительский элемент, родительский и дочерний элементы могут быть View . У него может быть столько детей, сколько вы хотите.

  • Если вы хотите стилизовать разные элементы, вы можете поместить их в View, так как он поддерживает свойство style , flexbox и т. Д.

  • View также поддерживает синтетические сенсорные события, которые могут быть полезны для различных целей.

Когда вам нужно обернуть ваши элементы внутри контейнера, вы можете использовать View как элемент контейнера.

Если вы хотите вложить больше элементов в родительский элемент, родительский и дочерний элементы могут быть View . У него может быть столько детей, сколько вы хотите.

Если вы хотите стилизовать разные элементы, вы можете поместить их в View, так как он поддерживает свойство style , flexbox и т. Д.

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

Мы уже использовали View в наших предыдущих главах, и мы будем использовать его почти во всех последующих главах. Представление можно считать элементом по умолчанию в React Native. В приведенном ниже примере мы вложим два вида и текст.

App.js

import React, { Component } from 'react'
import { View, Text } from 'react-native'

const App = () => {
   return (
      <View>
         <View>
            <Text>This is my text</Text>
         </View>
      </View>
   )
}
export default App

Выход

Реквизит обновлен

React Native — WebView

В этой главе мы узнаем, как использовать WebView. Он используется, когда вы хотите визуализировать веб-страницу в мобильном приложении.

Использование WebView

HomeContainer будет компонентом контейнера.

App.js

import React, { Component } from 'react'
import WebViewExample from './web_view_example.js'

const App = () => {
   return (
      <WebViewExample/>
   )
}
export default App;

Давайте создадим новый файл с именем WebViewExample.js в папке src / components / home .

web_view_example.js

import React, { Component } from 'react'
import { View, WebView, StyleSheet }

from 'react-native'
const WebViewExample = () => {
   return (
      <View style = {styles.container}>
         <WebView
         source = {{ uri:
         'https://www.google.com/?gws_rd=cr,ssl&ei=SICcV9_EFqqk6ASA3ZaABA#q=tutorialspoint' }}
         />
      </View>
   )
}
export default WebViewExample;

const styles = StyleSheet.create({
   container: {
      height: 350,
   }
})

Вышеуказанная программа сгенерирует следующий вывод.

Реагируйте на собственный WebView

React Native — Модальный

В этой главе мы покажем вам, как использовать модальный компонент в React Native.

Давайте теперь создадим новый файл: ModalExample.js

Мы поместим логику в ModalExample . Мы можем обновить начальное состояние, запустив toggleModal .

После обновления начального состояния запустив toggleModal , мы установим свойство visible для нашего модального режима . Этот реквизит будет обновляться при изменении состояния.

OnRequestClose требуется для устройств Android.

App.js

import React, { Component } from 'react'
import WebViewExample from './modal_example.js'

const Home = () => {
   return (
      <WebViewExample/>
   )
}
export default Home;

modal_example.js

import React, { Component } from 'react';
import { Modal, Text, TouchableHighlight, View, StyleSheet}

from 'react-native'
class ModalExample extends Component {
   state = {
      modalVisible: false,
   }
   toggleModal(visible) {
      this.setState({ modalVisible: visible });
   }
   render() {
      return (
         <View style = {styles.container}>
            <Modal animationType = {"slide"} transparent = {false}
               visible = {this.state.modalVisible}
               onRequestClose = {() => { console.log("Modal has been closed.") } }>
               
               <View style = {styles.modal}>
                  <Text style = {styles.text}>Modal is open!</Text>
                  
                  <TouchableHighlight onPress = {() => {
                     this.toggleModal(!this.state.modalVisible)}}>
                     
                     <Text style = {styles.text}>Close Modal</Text>
                  </TouchableHighlight>
               </View>
            </Modal>
            
            <TouchableHighlight onPress = {() => {this.toggleModal(true)}}>
               <Text style = {styles.text}>Open Modal</Text>
            </TouchableHighlight>
         </View>
      )
   }
}
export default ModalExample

const styles = StyleSheet.create ({
   container: {
      alignItems: 'center',
      backgroundColor: '#ede3f2',
      padding: 100
   },
   modal: {
      flex: 1,
      alignItems: 'center',
      backgroundColor: '#f7021a',
      padding: 100
   },
   text: {
      color: '#3f2949',
      marginTop: 10
   }
})

Наш стартовый экран будет выглядеть так —

React Native Open Modal

Если мы нажмем на кнопку, модал откроется.

Реагировать на родной модал

React Native — ActivityIndicator

В этой главе мы покажем вам, как использовать индикатор активности в React Native.

Шаг 1: приложение

Компонент приложения будет использоваться для импорта и отображения нашего ActivityIndicator .

App.js

import React from 'react'
import ActivityIndicatorExample from './activity_indicator_example.js'

const Home = () => {
   return (
      <ActivityIndicatorExample />
   )
}
export default Home

Шаг 2: ActivityIndicatorExample

Свойство Animating — это логическое значение, которое используется для отображения индикатора активности. Последний закрывается через шесть секунд после установки компонента. Это делается с помощью функции closeActivityIndicator () .

activity_indicator_example.js

import React, { Component } from 'react';
import { ActivityIndicator, View, Text, TouchableOpacity, StyleSheet } from 'react-native';

class ActivityIndicatorExample extends Component {
   state = { animating: true }
   
   closeActivityIndicator = () => setTimeout(() => this.setState({
   animating: false }), 60000)
   
   componentDidMount = () => this.closeActivityIndicator()
   render() {
      const animating = this.state.animating
      return (
         <View style = {styles.container}>
            <ActivityIndicator
               animating = {animating}
               color = '#bc2b78'
               size = "large"
               style = {styles.activityIndicator}/>
         </View>
      )
   }
}
export default ActivityIndicatorExample

const styles = StyleSheet.create ({
   container: {
      flex: 1,
      justifyContent: 'center',
      alignItems: 'center',
      marginTop: 70
   },
   activityIndicator: {
      flex: 1,
      justifyContent: 'center',
      alignItems: 'center',
      height: 80
   }
})

Когда мы запустим приложение, мы увидим загрузчик на экране. Он исчезнет через шесть секунд.

Реактивный индикатор активности

React Native — Picker

В этой главе мы создадим простой Picker с двумя доступными опциями.

Шаг 1: Создать файл

Здесь папка App.js будет использоваться как презентационный компонент.

App.js

import React from 'react'
import PickerExample from './PickerExample.js'

const App = () => {
   return (
      <PickerExample />
   )
}
export default App

Шаг 2: Логика

this.state.user используется для управления сборщиком.

Функция updateUser будет запущена при выборе пользователя.

PickerExample.js

import React, { Component } from 'react';
import { View, Text, Picker, StyleSheet } from 'react-native'

class PickerExample extends Component {
   state = {user: ''}
   updateUser = (user) => {
      this.setState({ user: user })
   }
   render() {
      return (
         <View>
            <Picker selectedValue = {this.state.user} onValueChange = {this.updateUser}>
               <Picker.Item label = "Steve" value = "steve" />
               <Picker.Item label = "Ellen" value = "ellen" />
               <Picker.Item label = "Maria" value = "maria" />
            </Picker>
            <Text style = {styles.text}>{this.state.user}</Text>
         </View>
      )
   }
}
export default PickerExample

const styles = StyleSheet.create({
   text: {
      fontSize: 30,
      alignSelf: 'center',
      color: 'red'
   }
})

Выход

React Native Picker

Если вы нажмете на имя, он предложит вам все три варианта, как —

React Native Picker

И вы можете выбрать один из них, и результат будет как.

React Native Picker

React Native — Строка состояния

В этой главе мы покажем вам, как управлять внешним видом строки состояния в React Native.

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

Скрытое свойство может быть использовано для скрытия строки состояния. В нашем примере установлено значение false . Это значение по умолчанию.

BarStyle может иметь три значения — dark-content, light-content и default .

Этот компонент имеет несколько других свойств, которые можно использовать. Некоторые из них являются специфичными для Android или IOS. Вы можете проверить это в официальной документации.

App.js

import React, { Component } from 'react';
import { StatusBar } from 'react-native'

const App = () => {
   return (
      <StatusBar barStyle = "dark-content" hidden = {false} backgroundColor = "#00BCD4" translucent = {true}/>
   )
}
export default App

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

Выход

Реагировать на собственную строку состояния

React Native — Переключатель

В этой главе мы расскажем о компоненте Switch за пару шагов.

Шаг 1: Создать файл

Мы будем использовать компонент HomeContainer для логики, но нам нужно создать презентационный компонент.

Теперь давайте создадим новый файл: SwitchExample.js .

Шаг 2: Логика

Мы передаем значение из состояния и функции для переключения элементов переключателя на компонент SwitchExample . Функции переключения будут использоваться для обновления состояния.

App.js

import React, { Component } from 'react'
import { View } from 'react-native'
import SwitchExample from './switch_example.js'

export default class HomeContainer extends Component {
   constructor() {
      super();
      this.state = {
         switch1Value: false,
      }
   }
   toggleSwitch1 = (value) => {
      this.setState({switch1Value: value})
      console.log('Switch 1 is: ' + value)
   }
   render() {
      return (
         <View>
            <SwitchExample
            toggleSwitch1 = {this.toggleSwitch1}
            switch1Value = {this.state.switch1Value}/>
         </View>
      );
   }
}

Шаг 3: Презентация

Переключатель компонента занимает два реквизита. Пропуск onValueChange запустит наши функции переключения после того, как пользователь нажмет на переключатель. Значение prop связано с состоянием компонента HomeContainer .

switch_example.js

import React, { Component } from 'react'
import { View, Switch, StyleSheet }

from 'react-native'

export default SwitchExample = (props) => {
   return (
      <View style = {styles.container}>
         <Switch
         onValueChange = {props.toggleSwitch1}
         value = {props.switch1Value}/>
      </View>
   )
}
const styles = StyleSheet.create ({
   container: {
      flex: 1,
      alignItems: 'center',
      marginTop: 100
   }
})

Если мы нажмем на переключатель, состояние будет обновлено. Вы можете проверить значения в консоли.

Выход

React Native Switch

React Native — Текст

В этой главе мы поговорим о текстовом компоненте в React Native.

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

Шаг 1: Создать файл

Файл, который мы собираемся создать, это text_example.js

Шаг 2: App.js

На этом шаге мы просто создадим простой контейнер.

App.js

import React, { Component } from 'react'
import TextExample from './text_example.js'

const App = () => {
   return (
      <TextExample/>
   )
}
export default App

Шаг 3: Текст

На этом этапе мы будем использовать шаблон наследования. styles.text будет применен ко всем текстовым компонентам.

Вы также можете заметить, как мы устанавливаем другие свойства стиля для некоторых частей текста. Важно знать, что все дочерние элементы имеют родительские стили, переданные им.

text_example.js

import React, { Component } from 'react';
import { View, Text, Image, StyleSheet } from 'react-native'

const TextExample = () => {
   return (
      <View style = {styles.container}>
         <Text style = {styles.text}>
            <Text style = {styles.capitalLetter}>
               L
            </Text>
            
            <Text>
               orem ipsum dolor sit amet, sed do eiusmod.
            </Text>
            
            <Text>
               Ut enim ad <Text style = {styles.wordBold}>minim </Text> veniam,
               quis aliquip ex ea commodo consequat.
            </Text>
            
            <Text style = {styles.italicText}>
               Duis aute irure dolor in reprehenderit in voluptate velit esse cillum.
            </Text>
            
            <Text style = {styles.textShadow}>
               Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
               deserunt mollit anim id est laborum.
            </Text>
         </Text>
      
      </View>
   )
}
export default TextExample

const styles = StyleSheet.create ({
   container: {
      alignItems: 'center',
      marginTop: 100,
      padding: 20
   },
   text: {
      color: '#41cdf4',
   },
   capitalLetter: {
      color: 'red',
      fontSize: 20
   },
   wordBold: {
      fontWeight: 'bold',
      color: 'black'
   },
   italicText: {
      color: '#37859b',
      fontStyle: 'italic'
   },
   textShadow: {
      textShadowColor: 'red',
      textShadowOffset: { width: 2, height: 2 },
      textShadowRadius : 5
   }
})

Вы получите следующий вывод —

Реагировать на родной текст

React Native — Alert

В этой главе мы поймем, как создать пользовательский компонент Alert .

Шаг 1: App.js

import React from 'react'
import AlertExample from './alert_example.js'

const App = () => {
   return (
      <AlertExample />
   )
}
export default App

Шаг 2: alert_example.js

Мы создадим кнопку для запуска функции showAlert .

import React from 'react'
import { Alert, Text, TouchableOpacity, StyleSheet } from 'react-native'

const AlertExample = () => {
   const showAlert = () =>{
      Alert.alert(
         'You need to...'
      )
   }
   return (
      <TouchableOpacity onPress = {showAlert} style = {styles.button}>
         <Text>Alert</Text>
      </TouchableOpacity>
   )
}
export default AlertExample

const styles = StyleSheet.create ({
   button: {
      backgroundColor: '#4ba37b',
      width: 100,
      borderRadius: 50,
      alignItems: 'center',
      marginTop: 100
   }
})

Выход

React Native Alert

Когда вы нажмете кнопку, вы увидите следующее —

Реагировать на кнопку родного оповещения

React Native — Геолокация

В этой главе мы покажем вам, как использовать геолокацию .

Шаг 1: App.js

import React from 'react'
import GeolocationExample from './geolocation_example.js'

const App = () => {
   return (
      <GeolocationExample />
   )
}
export default App

Шаг 2: Геолокация

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

Теперь нам нужно получить текущую позицию устройства, когда компонент смонтирован с помощью navigator.geolocation.getCurrentPosition . Мы уточним ответ, чтобы мы могли обновить состояние.

navigator.geolocation.watchPosition используется для отслеживания позиции пользователей. Мы также очищаем наблюдателей на этом этапе.

AsyncStorageExample.js

import React, { Component } from 'react'
import { View, Text, Switch, StyleSheet} from 'react-native'

class SwichExample extends Component {
   state = {
      initialPosition: 'unknown',
      lastPosition: 'unknown',
   }
   watchID: ?number = null;
   componentDidMount = () => {
      navigator.geolocation.getCurrentPosition(
         (position) => {
            const initialPosition = JSON.stringify(position);
            this.setState({ initialPosition });
         },
         (error) => alert(error.message),
         { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }
      );
      this.watchID = navigator.geolocation.watchPosition((position) => {
         const lastPosition = JSON.stringify(position);
         this.setState({ lastPosition });
      });
   }
   componentWillUnmount = () => {
      navigator.geolocation.clearWatch(this.watchID);
   }
   render() {
      return (
         <View style = {styles.container}>
            <Text style = {styles.boldText}>
               Initial position:
            </Text>
            
            <Text>
               {this.state.initialPosition}
            </Text>
            
            <Text style = {styles.boldText}>
               Current position:
            </Text>
            
            <Text>
               {this.state.lastPosition}
            </Text>
         </View>
      )
   }
}
export default SwichExample

const styles = StyleSheet.create ({
   container: {
      flex: 1,
      alignItems: 'center',
      marginTop: 50
   },
   boldText: {
      fontSize: 30,
      color: 'red',
   }
})

React Native — AsyncStorage

В этой главе мы покажем вам, как сохранить ваши данные с помощью AsyncStorage .

Шаг 1: Презентация

На этом шаге мы создадим файл App.js.

import React from 'react'
import AsyncStorageExample from './async_storage_example.js'

const App = () => {
   return (
      <AsyncStorageExample />
   )
}
export default App

Шаг 2: Логика

Имя из исходного состояния — пустая строка. Мы обновим его из постоянного хранилища при подключении компонента.

setName возьмет текст из нашего поля ввода, сохранит его с помощью AsyncStorage и обновит состояние.

async_storage_example.js

import React, { Component } from 'react'
import { StatusBar } from 'react-native'
import { AsyncStorage, Text, View, TextInput, StyleSheet } from 'react-native'

class AsyncStorageExample extends Component {
   state = {
      'name': ''
   }
   componentDidMount = () => AsyncStorage.getItem('name').then((value) => this.setState({ 'name': value }))
   
   setName = (value) => {
      AsyncStorage.setItem('name', value);
      this.setState({ 'name': value });
   }
   render() {
      return (
         <View style = {styles.container}>
            <TextInput style = {styles.textInput} autoCapitalize = 'none'
            onChangeText = {this.setName}/>
            <Text>
               {this.state.name}
            </Text>
         </View>
      )
   }
}
export default AsyncStorageExample

const styles = StyleSheet.create ({
   container: {
      flex: 1,
      alignItems: 'center',
      marginTop: 50
   },
   textInput: {
      margin: 5,
      height: 100,
      borderWidth: 1,
      backgroundColor: '#7685ed'
   }
})

Когда мы запускаем приложение, мы можем обновить текст, введя в поле ввода.