42 items
Feature Module Dependency Inversion Leak
Code QuizDependency Inversion Across Feature Modules
QuizMemoized Selector Reference Trap
Code QuizState Architecture Tradeoffs at Scale
QuizRedux Reducer State Mutation Bug
Code QuizState Patterns Across Platforms
QuizState Management Tradeoffs At Scale
Slides / VideoState Patterns: Context, Redux, Zustand
Slides / VideoState Management Tradeoffs at Scale
FlashcardState Management Patterns in Apps
FlashcardLocal State That Won't Update
Code QuizLocal vs Global State Basics
QuizReusable Component Ignores Its Input
Code QuizSeparation of Concerns in MVC
QuizLocal vs Global State Basics
FlashcardState Management Basics in iOS
Slides / VideoBridge Boundary Sync Call Bug
Code QuizBridge vs JSI Architecture Trade-offs
QuizMVVM ViewModel State Mutation Bug
Code QuizLayered Architecture and State Ownership
QuizNative vs JS Boundary: Bridge vs JSI
FlashcardNative vs JS Boundary Trade-offs
Slides / VideoZustand Selector Causing Re-renders
Code QuizState Ownership & Navigation in SwiftUI
QuizLayer Dependency Violation in MVVM
Code QuizLayered Architecture: Domain Layer Role
QuizState & Navigation Architecture
Slides / VideoLayered Architecture: Presentation, Domain, Data
Slides / VideoState Management & Navigation Architecture
FlashcardLayered Architecture: Presentation, Domain, Data
FlashcardViewModel Breaks Separation of Concerns
Code QuizSeparating UI, State & Data Layers
QuizRedux Store Never Updates
Code QuizContext vs Redux State Management
QuizState Patterns: Context vs Redux
Slides / VideoSeparation of Concerns in iOS
Slides / VideoState Management: Environment vs Redux
FlashcardSeparation of Concerns in iOS Architecture
FlashcardState Management Patterns
FlashcardState Management Patterns Compared
Slides / VideoComponent UI & Separation of Concerns
Slides / VideoSeparation of Concerns in UI Architecture
FlashcardMemoized Selector Reference Trap
A Reselect selector silently recomputes on every render because of where the filtering happens.
import { createSelector } from 'reselect';
interface Todo { id: string; done: boolean; }
interface RootState { todos: Todo[]; filter: string; }
// Intended: memoize the list of active todos so components
// only re-render when the active set actually changes.
export const selectActiveTodos = createSelector(
[(state: RootState) => state.todos.filter(t => !t.done)],
(activeTodos) => activeTodos
);
// Used in many components via useSelector(selectActiveTodos)
// but they keep re-rendering on unrelated state updates.Why does this selector fail to memoize and cause unnecessary re-renders?