Comments 54
fontSize: 20,
color: '#656565'
},
20 это чего? em, rem, px, pt и остальных вариаций размеров в CSS, так-же как и width/height. width: 80 — восемдесят кого? процентов? ну ок, если процентов, от родителя.
Но фонтСайз: 20% получится от чего? какой по дефолту фонт сайз, что за цифры? это 20 сантиметров или 20 километров?
Просто мне не понятно в чем он FZ считает, интуитивно догадываюсь что в пикселях — но хотелось-бы узнать точнее.
Из официальной документации:
The simplest way to set the dimensions of a component is by adding a fixed width and height to style. All dimensions in React Native are unitless, and represent density-independent pixels.
www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
Собранное приложение в итоге из чего состоит? Какие-то эмуляторы js, сервера..?
так что подозреваю что такая же куча говна из рантайма и набора скриптов.
единственное отличие — нативные контролы вместо html.
С тем же успехом можно node.js назвать «куча говна из рантайма и набора скриптов», но, боюсь вас не поймут.
Когда приложение запускается, RCTRootView загружает приложение из этого URL:
http://localhost:8081/index.ios.bundle
а разве это не так?
В целом мне нравится ReactNative и то как он развивается. Уже и microsoft взялись за его поддержку https://github.com/ReactWindows/react-native-windows.
Согласен. По наблюдениям на PhoneGap основные тормоза не от JavaScript, а от медленной отрисовки браузером. В профайлере практически не видно js, одна отрисовка. Тормоза от JavaScript есть только на старте, если js очень много. У нас его уже несколько мегабайт и на Андроид его загрузка занимает несколько секунд.
Дефолтное приложение запустилось но когда все удалил из index.ios.js и заменил вашем текстом для HelloWorld,
начал ругаться что «Super expression must either be null or a function, not undefined».
Видать бабел с реактом ругаются на что то… не могу понять…
i.imgur.com/Xa36TNW.png?1
Что значит «UI приложения выражается как функция текущего состояния приложения»?
У вас не возникло такого вопроса при переводе?
Любой UI — это функция текущего состояния, разве нет? Вы вводите текст — внешний вид приложения изменяется. Нажимаете кнопку — внешний вид изменяется. Или это что-то из области философии? Если так, то получается какой-то безаппеляционный аргумент против Титаниума.
Любой UI — это функция текущего состояния, разве нет?
С большой натяжкой. В реакте это более строго. Любой реакт компонент содержит два метода: setState и render. Сам компонент и является той функцией состояния.
В других фреймворках возможно двунаправленное движение состояния: компоненты меняют модель. В реакте движение данных из компонента в модель исключено.
Это продвигается как решение проблем сложных приложений, когда сложно понять что и где меняется. Я сейчас делаю проект в такой архитектуре для расширения кругозора. Сейчас вокруг этого подхода очень много эйфории. Правы-ли апологеты подхода покажет время.
Плюс, рендер React на самом деле не обновляет UI полностью (хотя с точки зрения разработки это выглядит именно так), а делает атомарные изменения, что положительно влияет на производительность.
Нельзя ли как-то по-старинке, отделить вид от поведения?
Styles.base.js — в нем объект в котором стили общие для обеих платформ, вида
export default {
container : {
flex: 1
}
};
Styles.ios.js — стили специфичные для iOs:
import BaseStyles from './Styles.base';
import { StyleSheet } from 'react-native';
export default StyleSheet.create([ BaseStyles, {
...
} ]);
Styles.android.js — специфичные для Андроида стили, содержимое аналогично предыдущему
Затем в коде нужного компонента уже делаю что то типа того:
import styles from './Styles'; //При этом подключатся базовые + специфичные только для текущей платформы
....
<View style={styles.container}>
...
</View>
Как-то так. Писал из головы, возможны неточности в деталях.
1) Можно ли это в продакшн. Версия реактнейтив ещё не добралась до первой, значит ли это что всё нестабильно, или что много важных фич не хватает?
2) Есть ли у кого опыт кроссплатформенного приложения написаного на React из-под windows? Насколько я понимаю, собирать iOS приложение можно только под макосью, теоретически для этого можно и виртуалкой воспользоваться. Может кто-нибудь уже занимался подобными извращениями?
var React = require('react-native');
Такое не работает то ли с 0.25 версии, то ли с 0.26. Теперь нужно React импортировать из пакета "react":
var React = require('react');
. Вот так и работаем, при каждом обновлении react-native приходится что-то переписывать…JavaScript код остается в текстовом виде. JS один из языков, для которых JIT компилятор эффективнее, чем AOT-компиляция. JIT-компилятор видит как исполняется блок кода и может перекомпилировать его "на лету" в случае необходимости. Написать оптимизирующий AOT-компилятор JS крайне затруднительно из-за самого языка программирования.
Virtual DOM нужен для того, чтобы код шарился бежду браузером и нативом. Т.е. у вас остается практически тот же код в браузере и на устройстве.
пруф: https://facebook.github.io/react-native/docs/javascript-environment.html
Доки по JavaScriptCore говорят об обратном: http://trac.webkit.org/wiki/JavaScriptCore
Предполагаю, что дока по React Native устарела. Действительно, до iOS8 JIT был доступен только для Safari. Однако с релизом iOS 8 компилятором обзавелся и WKWebView: http://developer.telerik.com/featured/why-ios-8s-wkwebview-is-a-big-deal-for-hybrid-development/
Предполагаю, что и JavaScriptCore мог им обзовестись.
Virtual DOM позволяет уменьшить количество взаимодействий с API для отрисовки точно так же как и «обычный» React в браузере — дорогостоящее обращение к API идёт только для перерисовки изменённых участков отображения, а не всего шаблона.
Для меня достоинством React Native является так же их «Learn once, write anywhere», Objective-C мне не знаком, а вот React Native не сильно отличается от его браузерного собрата
Погуглив я нашел вариант, что это из-за localhost но не понятно шде и на что менять.
Это вот сейчас всё это медленно, а через 5 лет скорости js на мобилках будут такие быстрые, что на мобилках будут летать самые обычные js-приложения и не нужны все эти замудрости с react-native и прочей чепухой =)
Это как раньше, когда js для браузеров был слабый, использовали тот же Flash для быстрых приложений.
Сейчас флеш умер для программ.
Так что react — это временное решение, которое через 5 лет будет ненужным.
Создаем приложение на JavaScript с помощью React Native