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

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

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

Avatar for Konstantin Dzuin

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 недель