Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Интерфейс для React Native приложения – быстро и без боли

Интерфейс для React Native приложения – быстро и без боли

Konstantin Dzuin

April 18, 2019
Tweet

More Decks by Konstantin Dzuin

Other Decks in Programming

Transcript

  1. Константин Дзюин UI Unit Lead, Frontend, Badoo
 17 лет в

    разработке интерфейсов, 6 лет в Badoo, 3 года в Лондоне
  2. 1. Дано • React ~ React Native • UI в

    React Native 2. Решение • Подходы • Инструменты 3. Ответ
  3. Шесть
 недель Жесткий тайминг как испытание для команды и технологии

    Команда из трех человек Максимальный результат минимальными ресурсами Судьба React Native Новые проекты для frontend vs fallback на нативные команды
  4. Как выжить разработчику интерфейса в React Native приложении? Как выжить

    разработчику интерфейса в React Native приложении? Особенно, когда специфика в новинку
  5. Как выжить разработчику интерфейса в React Native приложении? Как выжить

    разработчику интерфейса в React Native приложении? Особенно, когда специфика в новинку Как выжить разработчику интерфейса в React Native приложении? Особенно, когда специфика в новинку Особенно, когда у тебя всего 6 недель
  6. import React from 'react'; import PropTypes from 'prop-types'; import ButtonGroup

    from 'Components/_new/_UI/ButtonGroup/ButtonGroup'; import Button from 'Components/_new/_UI/Button/Button'; function ContinueBlock(props) { const { onClickContinue, onClickDismiss, } = props; return ( <ButtonGroup> <Button text={'Continue'} onClick={onClickContinue} /> <Button color={Button.Color.NEUTRAL} text={'Dismiss'} onClick={onClickDismiss} /> </ButtonGroup> ); } ContinueBlock.propTypes = { onClickContinue: PropTypes.func, onClickDismiss: PropTypes.func, }; export default ContinueBlock;
  7. <div>We can add text to block in web</div> <View>But not

    in React Native</View> {/* it will fail */} <View><Text>Only in the text node</Text></View> Text and styles
  8. <div>We can add text to block in web</div> <View>But not

    in React Native</View> {/* it will fail */} <View><Text>Only in the text node</Text></View> <div style={{ color: 'red' }}> ... <div>Very red text via inheritance</div> ... </div> <View style={{ color: 'red' }}> {/* it will fail */} ... <Text style={{ color: 'blue'}}>Text color only on text elements</Text> ... </View> Text and styles
  9. Layout в React Native Position and units Только relative &

    absolute Многие свойства работают только с логическими пикселями https://yogalayout.com/docs/ http://facebook.github.io/react-native/docs/layout-props
  10. Layout в React Native Position and units Только relative &

    absolute Многие свойства работают только с логическими пикселями Layout and Yoga flex: [number] По умолчанию – колонка, 
 а не ряд https://yogalayout.com/docs/ http://facebook.github.io/react-native/docs/layout-props
  11. Layout в React Native Position and units Только relative &

    absolute Многие свойства работают только с логическими пикселями Layout and Yoga flex: [number] По умолчанию – колонка, 
 а не ряд Aspect 
 Ratio Отлично работает в React Native Еще не доступно в CSS https://yogalayout.com/docs/ http://facebook.github.io/react-native/docs/layout-props
  12. <TextInput styles={[ styles.textInput, Platform.OS === 'android' && { padding: 0,

    paddingTop: UIKit.Spacing.XSM + 1, paddingBottom: UIKit.Spacing.LG - 1 }, ]} />
  13. <TextInput styles={[ styles.textInput, Platform.OS === 'android' && { padding: 0,

    paddingTop: UIKit.Spacing.XSM + 1, paddingBottom: UIKit.Spacing.LG - 1 }, Platform.OS === 'ios' && { marginTop: -0.5, padding: 0, paddingTop: UIKit.Spacing.XSM - 2, paddingBottom: UIKit.Spacing.LG + 1 }, ]} />
  14. <TextInput styles={[ styles.textInput, Platform.OS === 'android' && { padding: 0,

    paddingTop: UIKit.Spacing.XSM + 1, paddingBottom: UIKit.Spacing.LG - 1 }, Platform.OS === 'ios' && { marginTop: -0.5, padding: 0, paddingTop: UIKit.Spacing.XSM - 2, paddingBottom: UIKit.Spacing.LG + 1 }, Platform.OS === 'ios' && !this.props.multiline && { paddingTop: UIKit.Spacing.XSM - 4, paddingBottom: UIKit.Spacing.LG + 1 }, ]} />
  15. <TextInput styles={[ styles.textInput, Platform.OS === 'android' && { padding: 0,

    paddingTop: UIKit.Spacing.XSM + 1, paddingBottom: UIKit.Spacing.LG - 1 }, Platform.OS === 'ios' && { marginTop: -0.5, padding: 0, paddingTop: UIKit.Spacing.XSM - 2, paddingBottom: UIKit.Spacing.LG + 1 }, Platform.OS === 'ios' && !this.props.multiline && { paddingTop: UIKit.Spacing.XSM - 4, paddingBottom: UIKit.Spacing.LG + 1 }, Platform.OS === 'ios' && !value && { paddingTop: 5 } ]} />
  16. Separation of concerns Logic Отвечает за логику и клиент- серверное

    взаимодействие UI Отвечает за презентацию и визуальные состояния
  17. Separation of concerns Container Отвечает за логику и клиент- серверное

    взаимодействие View Отвечает за презентацию и визуальные состояния
  18. 1 Протокол UI похож на API приложения 2 Разработчики могут

    работать в изоляции Что мы получаем?
  19. 1 Протокол UI похож на API приложения 2 Разработчики могут

    работать в изоляции 3 Планирование задач в два потока Что мы получаем?
  20. Скорость и комфорт UI для новой фичи Выбор подходящих компонент

    и их композиций. Если компонент новый – разрабатываем удобно.
  21. Скорость и комфорт UI для новой фичи Выбор подходящих компонент

    и их композиций. Если компонент новый – разрабатываем удобно. Скорость тестирования Интерфейс уже протестирован и машиной, и человеком.
  22. Скорость и комфорт UI для новой фичи Выбор подходящих компонент

    и их композиций. Если компонент новый – разрабатываем удобно. Скорость тестирования Интерфейс уже протестирован и машиной, и человеком. Скорость разработки С использованием комплекса подходов и инструментов мы увеличили скорость разработки.
  23. 1 Приложение запущено, растёт и развивается 2 6 недель –

    реально, даже если вас всего трое Challenge
  24. 1 Приложение запущено, растёт и развивается 2 6 недель –

    реально, даже если вас всего трое 3 Бесценный опыт и mindset shift Challenge
  25. Повторил бы я опыт с React Native в реальной жизни

    еще раз? – Да Особенно, когда у меня всего 6 недель