Недавно я болтал с друзьямиReact-Native
Официальный статус рефакторинга и недавно выпущенный0.59.xВ серийной версии дизайн верхнего уровня претерпел серьезные корректировки.В сочетании с состоянием после опыта, я хочу поговорить об этом.React-Native
Статус-кво новой версии, опыт обновления новой версии, а также недавно поддерживаемый React Hook и другие функции.
Эта статья не является анализом исходного кода и учебным пособием, а скорее обсуждением и описанием записи. Автор работал надAndroid
,React-Native
,Flutter
Дождитесь большой фронтенд-разработки, а иногда пишитеReact
а такжеVue
, Эта статья также надеется связаться с вами. Если вы можете, вы можете задать вопросы или предложения. Наконец, я также надеюсь, что статья может вдохновить вас.
Skin, проект React-Native выпускается уже более 4 лет, а версии 1.0 пока нет (¬_¬)
1. Статус-кво
Я верю, что каждыйReact-Native
Первое впечатление о «быть крутым» должно быть от Alibaba.«Почему Airbnb отказалась от React Native», как описано в текстеReact-Native
Действительно будут некоторые узкие места в производительности, но это зависит от того, с кем вы сравниваете, я лично думаюКодекс служит бизнесу, и практика откладывания сцены и исполнения не является строгой.Ключ в том, как вы его используете, а также в том, активны ли и оптимизированы ли официальный сайт и сообщество.
Позвольте мне начать с моего понимания кроссплатформенности:Набор логики можно запускать на нескольких платформах, чтобы избежать несогласованности бизнес-логики каждой платформы, а снижение нагрузки не очевидно! Не очевидно! Не очевидно!В то же время, после того, как корпоративный проект большой, он обычно не ограничивается одним фреймворком.
На самом деле, Facebook не сдалсяReact-Native
, испытывая«Facebook проводит рефакторинг React Native, который перепишет большую часть нижнего слоя»После официального объявления, почти через год после «обработки», хотя лежащий в основе рефакторинг официально не выпущен, недавняя новая версия0.59.xТоже дал хороший ответ.
Новая версия в основном включает в себя следующие пункты:
- 1. Уменьшенный
React-Native
Собственный фреймворк, разделяющий встроенные пакеты, такие как webView, viewPager, netinfo, async-storage и т. д., независимо поддерживаемые сообществом и постепенно размываемыеReact
а такжеReact-Native
границы. - 2. Обновите JavaScriptCore, обновите инструменты и CLI.
- 3. ПоддержкаReact Hooks.
- 4. Исправлено
FlatList
И многие другие проблемы в управлении списком.
Основными целями рефакторинга в будущих версиях являются:
- 1. Уменьшите зависимость JSBridge.
- 2. ПройтиFabricАрхитектура пользовательского интерфейса, будет
Shadow
Пол,UIManager
,NativeModule
Перенесено с Java на C++ для поддержкиДвусторонний синхронный и асинхронный рендеринг и вызов.
Как можно заметить0.59Рефакторинг и разделение в версии — все это подготовка к следующему рефакторингу.Более конкретный анализ содержимого рефакторинга следующего поколения можно найти на JD.com.«Паодин Цзе Ню! Углубленный анализ рефакторинга архитектуры нового поколения React Native».Проверьте это, я не буду вдаваться в подробности здесь.
Также в проекте Ctrip:«Структура разработки CRN с открытым исходным кодом CRN»В статье также было сказано, что он был обновлен в первый раз0.59.xверсия, все еще чувствуюReact-Native
"Холодает"?
Не по теме:
В современном мире программирования существуют различные «партийные споры», такие как
Vue
,React
,Angular
, кроссплатформенныйCordova
,Weex
,React-Native
,Flutter
и т. д., и когда я рассматриваю выбор фреймворка, я обычно отдаю предпочтение следующим моментам:
- 1. Активность фреймворка.
- 2. Сложность потребностей вашего бизнеса.
- 3. Конфигурация команды и технический стиль членов команды.
- 4. Личный комфорт в кадре.
2. React-Native 0.59.x
Прежде чем выбрать версию обновления, нам нужно понятьReact-Native
Китайская версия имеет0.A.BУстанавливается основной номер версии A-минор B, в то время какReact-Native
Одно из моих ощущений во время использования:
делаетReact-Native
При выборе или обновлении последней версии лучше не выбирать версию 0.A.0, например 0.59.0; обычно я выбираю итерацию младшей версии после основной версии, например, версию 0.59.4 для обновления и обновление, эта версия относительно более стабильна, вы можете меньше ложить некоторые проблемы.
потомReact-Native
Устройство версии всегда было большой проблемой, я обычно лежал в моем проекте с открытым исходным кодом, на этот раз в моем проекте с открытым исходным кодомGSYGithubAPP, из0.57.8
обновить непосредственно до0.59.4
версии, результаты, как правило, не гладкие, как ожидалось, в то время как общееReact-Native
Существует три основных типа проблем, вызванных обновлением версии:
1,Корректировки официального API:
Как правило, такие проблемы решаются относительно легко, и в официальном документе по обновлению также есть подробные инструкции.React-Native
автономныйwebView
,netinfo
,async-storage
дождитесь замены плагинаreact-native-communityпредставлен ниже и заменяет некоторые устаревшие API.
2,Сторонняя библиотека несовместима :
Это тожеReact-Native
В стороннем пакете это головная боль,потому что сопровождение сторонних пакетов происходит неравномерно.В принципе,если автор не поддерживает или не поддерживает вовремя,то только сам с кривой усмешкой может это сделать,как и в этот раз .GSYGithubAPP
В процессе обновления есть:
-
столкнулся после обновления
realm
Ошибка компиляции библиотеки на Xcode неверна, подробности см.GSYGithubAPP#66, проблема хоть и не большая, но решается простой сменой БД локально, что тоже текущий апгрейд проекта не слит вmaster
одна из причин. -
react-native-router-flux
а такжеreact-navigation
Модернизированные версии должны соответствовать друг другу, и в то же время должны увеличиваться.react-native-gesture-handler
зависит от и вindex.js
Импортируйте заранее на входе, чтобы решить некоторые проблемы. -
Различные сторонние плагины для Android
targetSdk
а такжеsupportSdk
Например, проблемы с версиями и зависимостями.
3.node_module "черная дыра":
Такой вопрос относится к персонажу, напримерGSYGithubAPP
товар из0.57обновитесь до0.59, покаBackAndroid
существует0.58полностью устарел, если проект имеет одинmodal
используемый плагинBackAndroid
, хотя автор и обновил плагин для совместимости, но...
После обновления плагина он все еще сообщает об ошибке после повторного запуска? WTF, а исходный код плагина больше недоступенBackAndroid
трейсы, откуда ошибка?
Просмотр текущего через отладку Chromebundle
Исходный код, и, наконец, обнаружил, что он действительноBackAndroid
существование, оно было должным образом оценено в то времяПроблема с кешем.
После выполнения бесчисленного количества раз, чтобы удалить приложение, закрыть интерфейс командной строки, удалитьnode_module
После переустановки, наконец, удалив кешrm -rf ~/.rncache
а такжеrm -rf $TMPDIR/*
, а затем переустановитеnode_module
Запуск решает проблему.
-
Суммировать
Собственно поэтому я и говорюReact-Native
Ждем кроссплатформенной разработки, на самом деле нет смысла снижать нагрузку.Кроссплатформенность решает унифицированное обслуживание логики, и в процессе разработки возникает множество проблем совместимой разработки, а адаптация между платформами также требует времени.
я верю каждому
React-Native
Разработчики ненавидят полноэкранный красный цвет, поэтому я не знаю, с какой версии начать,React-Native
Добавлены красные и черные эффекты для ошибок (¬_¬).
3. Реагистрационные крючки
React Hooks
Я действительно обновился до0.59Одна из целей, потому что это действительно очень интересный сеттинг.
На самом деле, я не являюсь строго фронтенд-персоналом, большую часть времени яCSSа такжеESпонимание не в глубину, а вJSЕсть несколько, которые впечатлили меня в процессе использования:
-
Redux:
Redux
Дизайн управления состоянием и ряд последующих и сторонних плагинов, производных от него, я лично думаю, что этоReact
Один из бустеров, который смог быстро стать популярным в первую очередь. -
HOCа такжеES7 Decorators: на самом деле это также должно быть включено в
Redux
, ноHOC + DecoratorsБыстро добиться эффекта аспектоподобного программирования, что, несомненно, заставляет меня чувствовать себя дружелюбно в Java-разработке.
Наконец, главный геройReact Hooks
сейчас,React Hooks
Это также относительно новое понятие, оReact Hooks
Я рекомендую эту статью:«[Подробно реагировать] От Mixin до HOC и Hook», что хорошо описано в текстеReact
Развитие и контраст стилей развития.
И дляReact Hooks
может быть введен так раноReact-Native
, это дает мне ощущение, чтоFacebookКоманда работает надразмытоReact
Граница разработчика между сетью и приложением, а также для обогащенияReact
Экосистема разработчиков.
И дляReact Hooks
, функциональное программирование, вероятно, ближе к форме «будущего» в моем понимании (хотя я не особо уверен), в то время какReact Hooks
У него есть явные преимущества:
- Это может лучше уменьшить объем нашего кода.
- При этом снижается блокировка, вызванная кодом при выполнении жизненного цикла.
- Пользовательские хуки могут в определенной степени отделить друг друга, увеличить повторное использование и уменьшить вложенность.
- Стиль функционального программирования делает функции независимыми, а код лаконичным и легко читаемым.
Вернемся к конкретному использованию,React Hooks
Наиболее распространенные интерфейсы по умолчанию:
-
useState
Позволяет быстро добавлять состояние к функциям -
useEffect
Позволяет быстро добавить обработку жизненного цикла -
useImperativeHandle
Быстро открыть интерфейс для внешнего мира
Эти встроенные хуки могут в определенной степени сохранить ваш код и обеспечить четкую логику управления состоянием, используя преимущества официальногоuseReducer
, как следующий код, вы можете быстро написать псевдоRedux
.
import React, {Component, useReducer, useRef, useImperativeHandle, forwardRef} from 'react';
import {Text, View, TouchableOpacity,} from 'react-native';
const initialState = {count: 0};
function reducer(state, action) {
switch (action.type) {
case 'reset':
return initialState;
case 'increment':
return {count: state.count + 1};
case 'decrement':
return {count: state.count - 1};
default:
return state;
}
}
export function DemoCounter({initialCount}) {
const [state, dispatch] = useReducer(reducer, {count: initialCount});
return (
<View>
<Text>Count: {state.count}</Text>
<TouchableOpacity onPress={() => dispatch({type: 'reset'})}>
<Text>Reset</Text>
</TouchableOpacity>
<TouchableOpacity onPress={() => dispatch({type: 'increment'})}>
<Text>+</Text>
</TouchableOpacity>
<TouchableOpacity onPress={() => dispatch({type: 'decrement'})}>
<Text>-</Text>
</TouchableOpacity>
</View>
)
}
дляReact Hooks
, в сочетании с простым пониманием исходного кода и статьи, просто используйте серию хуков перед рендерингом, иHooksиспользуется внутримножество, который реализует последовательное обновление данных состояния.
Так чиновник сказал,Хуки нельзя использовать в циклах или условных суждениях., что является соглашением, потому чтоHooksМассив внутри вызывается последовательно каждый раз.Если порядок в условном суждении нарушен, курсор не сможет сопоставить правильные данные, поэтому условлено неif
илиfor
используется вuseState
поведение.
оReact Hooks
Для получения более подробной информации о сухих товарах см.:
Наконец, давайте поговорим о стиле кодирования.:
Будь тоHOC
,React Hooks
,Redux
Подождите, на самом деле я не думаю, что существует так называемое оптимальное решение, конкретный выбор использования зависит от бизнес-сценария.Чрезмерный дизайн ради дизайна, следствием убийства кур бычьим ножом является то, что это очень неудобно, и легко случайно пораниться.
Если это личная разработка, понятно, что код шоу яркий, но если это реальная командная разработка, лучше всего рассмотреть совместный выбор команды, в противном случае код, который вы пишете, можете поддерживать только вы, и это подсчитано, что вы будете плакать в конце.
Что ж, на этом статья заканчивается! (///▽///)
Полные кроссплатформенные проекты и статьи:
- Проекты и статьи Flutter с открытым исходным кодом
- React Native проекты и статьи с открытым исходным кодом
- Проекты и статьи Weex с открытым исходным кодом
Полное содержание статьи находится на домашней странице проекта ReadMe.
Другие статьи
«Углубленный анализ мобильной кроссплатформенной разработки»