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],
);
}
patterns Article's
30 articles in total
Streamlining Data Flow in Angular: The Power of the Adapter Pattern ๐
read article
CQRS โ Command Query Responsibility Segregation โ A Java, Spring, SpringBoot, and Axon Example
read article
Mastering the Container-Presenter Pattern in Angular: A Deep Dive
read article
Repository Design Pattern, Promoting Packages via ADS, and New Arabic Article โจ
read article
Flexibilidad y Escalabilidad: Usando Strategy y Factory Patterns
read article
Understanding Domain Events in TypeScript: Making Events Work for You
read article
Padrรตes de Projeto em React [HOCs, Render Props, Hooks]
read article
Mobile Development Platforms and software architecture pattern in mobile development
read article
Finite-state machine example in JavaScript
read article
OOP Simplified: Quick Factory Methods with Encapsulation, Abstraction, and Polymorphism in TypeScript
read article
Finite-state machine example in JavaScript
read article
How to avoid N + 1 and keep your Ruby on Rails controller clean
read article
Types Of Software Architecture
read article
Testando das trincheiras: Usando um "clock" fixo
read article
ยฟPOR QUร no estรกs usando estos providers de Angular?
read article
Common and Useful Deployment Patterns
read article
Reusing state management: HOC vs Hook
currently reading
Understanding JavaScript Creational Patterns for Object Creation
read article
Understanding Design First: Principles, Patterns, and Best Practices Explained
read article
The Architecture Might Not Be the Problem
read article
Padrรฃo JumpTable com Javascript
read article
Explorando os Fundamentos dos Padrรตes de Projeto: Conceitos Bรกsicos
read article
Six Factors That Raise The Risk Of Bugs In A Codebase
read article
Microservices: Avoiding the Pitfalls, Embracing the Potential - A Guide to Anti-Patterns
read article
Android Presentation Patterns: MVI
read article
Entendendo o Pub/Sub com Javascript
read article
The Consumer Conundrum: Navigating Change in Microservices Without Gridlock
read article
๐ช๐ต๐ฎ๐ ๐ฎ๐ฟ๐ฒ ๐๐ต๐ฒ ๐ฅ๐ฒ๐ด๐๐
๐ฃ๐ฎ๐๐๐ฒ๐ฟ๐ป๐?
read article
Using a Trait in Builder CLIs
read article
CLI Contexts
read article
Featured ones: