React
React Anti-Patterns: Build efficient and maintainable React applications with test-driven development and refactoring
Juntao Qiu, 2024
Inhaltsverzeichnis des Buches
- React Anti-Patterns
- Contributors
- About the author
- About the reviewers
- Preface
- Who this book is for
- What this book covers
- To get the most out of this book
- Download the example code files
- Conventions used
- Get in touch
- Share Your Thoughts
- Download a free PDF copy of this book
- Part 1:Introducing the Fundamentals
- Chapter 1: Introducing React Anti-Patterns
- Technical requirements
- Understanding the difficulty of building UIs
- Understanding the state management
- Exploring “unhappy paths”
- Errors thrown from other components
- Learning the unexpected user behavior
- Exploring common anti-patterns in React
- Props drilling
- In-component data transformation
- Complicated logic in views
- Lack of tests
- Duplicated code
- Long component with too much responsibility
- Unveiling our approach to demolishing anti-patterns
- Summary
- Chapter 2: Understanding React Essentials
- Technical requirements
- Understanding static components in React
- Creating components with props
- Breaking down UIs into components
- Managing internal state in React
- Understanding the rendering process
- Exploring common React Hooks
- useState
- useEffect
- useCallback
- The React Context API
- Summary
- Chapter 3: Organizing Your React Application
- Technical requirements
- Understanding the problem of a less-structured project
- Understanding the complications of frontend applications
- Exploring common structures in React applications
- Feature-based structure
- Component-based structure
- Atomic design structure
- The MVVM structure
- Keeping your project structure organized
- Implementing the initial structure
- Adding an extra layer to remove duplicates
- Naming files
- Exploring a more customized structure
- Summary
- Chapter 4: Designing Your React Components
- Technical requirements
- Exploring the single responsibility principle
- Don’t repeat yourself
- Using composition
- Combining component design principles
- Summary
- Part 2: Embracing Testing Techniques
- Chapter 5: Testing in React
- Technical requirements
- Understanding why we need tests
- Learning about different types of tests
- Testing individual units with Jest
- Writing your first test
- Grouping tests
- Testing React components
- Learning about integration tests
- Learning about E2E tests using Cypress
- Installing Cypress
- Running our first E2E test
- Intercepting the network request
- Summary
- Chapter 6: Exploring Common Refactoring Techniques
- Technical requirements
- Understanding refactoring
- The common mistakes of refactoring
- Adding tests before refactoring
- Using Rename Variable
- Using Extract Variable
- Using Replace Loop with Pipeline
- Using Extract Function
- Using Introduce Parameter Object
- Using Decompose Conditional
- Using Move Function
- Summary
- Chapter 7: Introducing Test-Driven Development with React
- Technical requirements
- Understanding TDD
- Different styles of TDD
- Focusing on user value
- Introducing tasking
- Introducing the online pizza store application
- Breaking down the application requirements
- Implementing the application headline
- Implementing the menu list
- Creating the shopping cart
- Adding items to the shopping cart
- Refactoring the code
- Summary
- Part 3: Unveiling Business Logic and Design Patterns
- Chapter 8: Exploring Data Management in React
- Technical requirements
- Understanding business logic leaks
- Introducing the ACL
- Introducing a typical usage
- Using the fallback or default value
- Exploring the prop drilling issue
- Using the Context API to resolve prop drilling
- Summary
- Chapter 9: Applying Design Principles in React
- Technical requirements
- Revisiting the Single Responsibility Principle
- Exploring the render props pattern
- Using composition to apply the SRP
- Embracing the Dependency Inversion Principle
- Understanding how the DIP works
- Applying the DIP in an analytics button
- Understanding Command and Query Responsibility Segregation in React
- Introducing useReducer
- Using a reducer function in a context
- Summary
- Chapter 10: Diving Deep into Composition Patterns
- Technical requirements
- Understanding composition through higher-order components
- Reviewing higher-order functions
- Introducing HOCs
- Implementing an ExpandablePanel component
- Exploring React Hooks
- Unveiling remote data fetching
- Refactoring for elegance and reusability
- Developing a drop-down list component
- Implementing keyboard navigation
- Maintaining simplicity in the Dropdown component
- Introducing the Headless Component pattern
- The advantages and drawbacks of Headless Component pattern
- Libraries and further learnings
- Summary
- Part 4: Engaging in Practical Implementation
- Chapter 11: Introducing Layered Architecture in React
- Technical requirements
- Understanding the evolution of a React application
- Single-component applications
- Multiple-component applications
- State management with Hooks
- Extracting business models
- Layered frontend application
- Enhancing the Code Oven application
- Refactoring the MenuList through a custom Hook
- Transitioning to a class-based model
- Implementing the ShoppingCart component
- Applying discounts to Items
- Exploring the Strategy pattern
- Delving into layered architecture
- The layered structure of the application
- Advantages of layered architecture
- Summary
- Chapter 12: Implementing an End-To-End Project
- Technical requirements
- Getting the OpenWeatherMap API key
- Preparing the project’s code base
- Reviewing the requirements for the weather application
- Crafting our initial acceptance test
- Implementing a City Search feature
- Introducing the OpenWeatherMap API
- Stubbing the search results
- Enhancing the search result list
- Implementing an ACL
- Implementing an Add to Favorite feature
- Modeling the weather
- Refactoring the current implementation
- Enabling multiple cities in the favorite list
- Refactoring the weather list
- Fetching previous weather data when the application relaunches
- Summary
- Chapter 13: Recapping Anti-Pattern Principles
- Revisiting common anti-patterns
- Props drilling
- Long props list/big component
- Business leakage
- Complicated logic in views
- Lack of tests (at each level)
- Code duplications
- Skimming through design patterns
- Higher-order components
- Render props
- Headless components
- Data modeling
- Layered architecture
- Context as an interface
- Revisiting foundational design principles
- Single Responsibility Principle
- Dependency Inversion Principle
- Don't Repeat Yourself
- Anti-Corruption Layers
- Using composition
- Recapping techniques and practices
- Writing user acceptance tests
- Test-Driven Development
- Refactoring and common code smells
- Additional resources
- Summary
- Index