$30 off During Our Annual Pro Sale. View Details »

Lessons learned: Architecting react apps

Lessons learned: Architecting react apps

Ankita Kulkarni

September 15, 2020
Tweet

More Decks by Ankita Kulkarni

Other Decks in Technology

Transcript

  1. @kulkarniankita9
    10 consulting lessons:
    architecting react apps
    Ankita Kulkarni,
    Tech Lead, Loblaw Digital

    View Slide

  2. @kulkarniankita9
    Hi, I’m Ankita!

    View Slide

  3. @kulkarniankita9
    What have I built?

    View Slide

  4. @kulkarniankita9

    View Slide

  5. @kulkarniankita9
    Use cases
    • Monitor your credit score - using biometrics
    • Food delivery app
    • Reporting

    View Slide

  6. @kulkarniankita9

    View Slide

  7. @kulkarniankita9
    1. Project
    structure

    View Slide

  8. @kulkarniankita9
    Directory structure
    index.js
    src
    auth
    index.js
    actions/epic/reducer/selector
    common
    components
    button
    primaryButton/secondaryButton/tertiaryButton
    utils
    constants
    store
    storybook
    locale
    Modules

    View Slide

  9. @kulkarniankita9
    Challenges
    • A lot of shared context made it difficult to share code
    Vertical slicing modules eg: auth, biometrics

    View Slide

  10. @kulkarniankita9
    2. React context
    and state
    management

    View Slide

  11. @kulkarniankita9
    Project

    View Slide

  12. @kulkarniankita9
    Is Context a state
    management
    solution?

    View Slide

  13. @kulkarniankita9
    Does Context
    replace redux?

    View Slide

  14. @kulkarniankita9
    Do you need
    redux?

    View Slide

  15. @kulkarniankita9
    We couldn’t get rid of state management
    library

    View Slide

  16. @kulkarniankita9
    Common context examples ✨
    • Auth context
    • Orders context

    View Slide

  17. @kulkarniankita9
    Challenges
    • Context was used as a state management solution
    When the app was small, this worked fine but not when it grew
    Look into a state management solution

    Examples: Redux, Apollo cache

    View Slide

  18. @kulkarniankita9
    3. How storybook
    helped and
    evolved?

    View Slide

  19. @kulkarniankita9
    What is storybook?

    View Slide

  20. @kulkarniankita9
    Storybook is

    View Slide

  21. @kulkarniankita9
    Design tokens

    View Slide

  22. @kulkarniankita9
    Component library

    View Slide

  23. @kulkarniankita9
    Examples

    View Slide

  24. @kulkarniankita9
    4. With ❤
    and without GQL

    View Slide

  25. @kulkarniankita9
    What is GQL?
    • Only get what you ask for

    View Slide

  26. @kulkarniankita9
    Without GQL

    View Slide

  27. @kulkarniankita9
    Without GQL

    View Slide

  28. @kulkarniankita9
    With GQL

    View Slide

  29. @kulkarniankita9
    With GQL

    View Slide

  30. @kulkarniankita9
    Challenges
    • We were missing data transformation using Apollo hooks
    Added validation on top of this to check for null values

    View Slide

  31. @kulkarniankita9
    5. Performance

    View Slide

  32. @kulkarniankita9
    Container and presentational
    components

    View Slide

  33. @kulkarniankita9

    • Container and Presentational components
    • Use memoization
    • Use pure functions
    • Code splitting

    View Slide

  34. @kulkarniankita9
    6. Documentation
    and on-boarding

    View Slide

  35. @kulkarniankita9
    Docs!
    • Add a task to add some documentation to every Jira ticket
    • Practice what you preach

    View Slide

  36. @kulkarniankita9
    7. Accessibility

    View Slide

  37. @kulkarniankita9
    React a11y
    • https://github.com/dequelabs/react-axe
    • Lighthouse

    View Slide

  38. @kulkarniankita9
    Lighthouse

    View Slide

  39. @kulkarniankita9
    8. With hooks ⚓

    View Slide

  40. @kulkarniankita9
    Common hooks ✨
    • Translation hook
    • Accessibility hook for reducing motion
    • Responsive breakpoints

    View Slide

  41. @kulkarniankita9
    9. Testing

    View Slide

  42. @kulkarniankita9
    What gave us
    more
    confidence?

    View Slide

  43. @kulkarniankita9
    Testing
    • Unit testing
    • React component testing: react-testing-library
    • API data transformation layer testing
    • Integration testing
    • Automation testing

    View Slide

  44. @kulkarniankita9
    10. Forms are
    hard, use a
    library

    View Slide

  45. @kulkarniankita9

    View Slide

  46. @kulkarniankita9
    Libraries used
    • Formik
    • redux-form

    View Slide

  47. @kulkarniankita9
    Example

    View Slide

  48. @kulkarniankita9
    Design pattern
    • Multi-step sign-up process
    • JSON form builder

    View Slide

  49. @kulkarniankita9
    Bonus: Be
    Empathetic!

    View Slide

  50. @kulkarniankita9
    This is pretty much the end..
    Questions?
    Comments?
    Feedback…make it positive—
    Catch me after!!

    View Slide

  51. @kulkarniankita9
    You did it

    View Slide