dev-resources.site
for different kinds of informations.
Reusing state management: HOC vs Hook
Published at
5/26/2024
Categories
react
state
modularity
patterns
Author
buchananwill
Author
12 person written this
buchananwill
open
I've been looking at alternative approaches to HoC wrappers, as the evolution of client/server components and React best practices has pushed the HoC pattern down the list of "good modularity patterns". As a comparative exercise, I took this wrapper, and re-wrote it as a hook, using useCallback and React.memo for re-render stability. The hook version seems more in line with modern React style, but otherwise doesn't seem to offer much over the HoC version. Has anyone else looked at these patterns, or otherwise have a better solution?
HoC:
"use client";
import { DtoUiComponent, Entity } from "../../types";
import React from "react";
import { useDtoStoreDispatchAndListener } from "../../hooks/main";
import { useDtoStoreDelete } from "../../hooks/main";
export function DtoComponentWrapper<T extends Entity>({
entityClass,
id,
uiComponent: UiComponent,
}: {
entityClass: string;
id: string | number;
uiComponent?: DtoUiComponent<T>;
}) {
const { currentState, dispatchWithoutControl } =
useDtoStoreDispatchAndListener<T>(
id,
entityClass,
UiComponent?.name || "component",
);
const { dispatchDeletion, deleted } = useDtoStoreDelete(entityClass, id);
return (
UiComponent && (
<UiComponent
entity={currentState}
entityClass={entityClass}
dispatchWithoutControl={dispatchWithoutControl}
deleted={deleted}
dispatchDeletion={dispatchDeletion}
/>
)
);
}
Hook:
"use client";
import { DtoUiComponent, Entity } from "../../types";
import React, { memo, useCallback } from "react";
import {
useDtoStoreDelete,
useDtoStoreDispatchAndListener,
} from "../../hooks/main";
export function useDtoComponent<T extends Entity>(
entityClass: string,
UiComponent: DtoUiComponent<T>,
) {
return useCallback(
memo(({ id }: { id: string | number }) => {
const { currentState, dispatchWithoutControl } =
useDtoStoreDispatchAndListener<T>(
id,
entityClass,
UiComponent?.name || "component",
);
const { dispatchDeletion, deleted } = useDtoStoreDelete(entityClass, id);
return (
UiComponent && (
<UiComponent
entity={currentState}
entityClass={entityClass}
dispatchWithoutControl={dispatchWithoutControl}
deleted={deleted}
dispatchDeletion={dispatchDeletion}
/>
)
);
}),
[entityClass, UiComponent],
);
}
state Article's
30 articles in total
Svelte 5: Share state between components (for Dummies)
read article
Pampanga State Agricultural University
read article
Data Flow in LLM Applications: Building Reliable Context Management Systems
read article
Props and State in React
read article
Radar Market Innovations: Phased Array Solid-State Radar Development
read article
A single state for Loading/Success/Error in NgRx
read article
Advanced State Management - XState
read article
Top 7 Tips for Managing State in JavaScript Applications 🌟
read article
MithrilJS component with state management
read article
React State Management: When & Where add your states?
read article
STATE MANAGEMENT IN REACT
read article
State Management with Zustand
read article
A practical summary of React State variables & Props!
read article
State in React
read article
Weak memoization in Javascript
read article
Crafting a Global State Hook in React
read article
Reusing state management: HOC vs Hook
currently reading
State Vs Prop in React [Tabular Difference]
read article
Mastering XState Fundamentals: A React-powered Guide
read article
Does limiting state matter on the FrontEnd?
read article
Reducer vs. Finite State Machines: Understanding the Paradigm Shift
read article
A tool that can be used by anyone to manage React Query state externally
read article
Taming the State Beast: Redux vs. Recoil in React
read article
11 friends of state management in Angular
read article
React State Management
read article
How Can State Management Be Applied To A Real World Case-Scenario
read article
No more State Management with Signals
read article
How to keep state between page refreshes in React
read article
How to sync React state across tabs with workers
read article
State Management Patterns in React
read article
Featured ones: