
Security News
curl Shuts Down Bug Bounty Program After Flood of AI Slop Reports
A surge of AI-generated vulnerability reports has pushed open source maintainers to rethink bug bounties and tighten security disclosure processes.
@stainless-code/react-memo
Advanced tools
A utility library to simplify and enhance memoization for React functional components using React.memo.
React.memo.npm install @stainless-code/react-memo
yarn add @stainless-code/react-memo
pnpm add @stainless-code/react-memo
bun add @stainless-code/react-memo
Enhance your React components with precise memoization:
import { withMemo, withMemoOnce } from "@stainless-code/react-memo";
import React from "react";
const MyComponent: React.FC<{ value: number; onClick: () => void }> = ({
value,
onClick,
}) => <button onClick={onClick}>{value}</button>;
// Memoize based on specific dependencies
const MemoizedComponent = withMemo(MyComponent, ["value"]);
// Memoize the component to never re-render
const MemoizedOnceComponent = withMemoOnce(MyComponent);
export default function App() {
return (
<>
<MemoizedComponent value={10} onClick={() => console.log("Clicked!")} />
<MemoizedOnceComponent
value={20}
onClick={() => console.log("Clicked again!")}
/>
</>
);
}
If the dependencyProps contain keys that don't exist on the component's props, TypeScript will throw an error:
import { withMemo } from "@stainless-code/react-memo";
import React from "react";
const MyComponent: React.FC<{ value: number; onClick: () => void }> = ({
value,
onClick,
}) => <button onClick={onClick}>{value}</button>;
// ❌ TypeScript Error: "nonExistentProp" does not exist on the props of MyComponent.
const MemoizedComponent = withMemo(MyComponent, ["value", "nonExistentProp"]);
export default MemoizedComponent;
If the dependencyProps accurately reflect the keys of the component's props, TypeScript ensures everything works smoothly:
import { withMemo } from "@stainless-code/react-memo";
import React from "react";
const MyComponent: React.FC<{ value: number; onClick: () => void }> = ({
value,
onClick,
}) => <button onClick={onClick}>{value}</button>;
// âś… TypeScript passes: "value" and "onClick" are valid props for MyComponent.
const MemoizedComponent = withMemo(MyComponent, ["value", "onClick"]);
export default MemoizedComponent;
withMemoEnhance a functional component with memoization, allowing re-renders only when specific dependencies or props change.
| Parameter | Type | Default | Description |
|---|---|---|---|
Component | React.FC<T> | Required | The React functional component to memoize. |
dependencyProps? | (keyof T)[] | undefined | An array of prop names to check for changes. If omitted, all props are compared. |
Returns a React.MemoExoticComponent that wraps the input component.
withMemoOnceMemoize a functional component such that it never re-renders, regardless of prop changes.
| Parameter | Type | Default | Description |
|---|---|---|---|
Component | React.FC<T> | Required | The React functional component to memoize. |
Returns a React.MemoExoticComponent that wraps the input component.
Feel free to submit issues or pull requests to improve the library. Every bit of help is appreciated. đź’–
Read the contribution guidelines.
FAQs
Elegantly use custom events in React
We found that @stainless-code/react-memo demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
A surge of AI-generated vulnerability reports has pushed open source maintainers to rethink bug bounties and tighten security disclosure processes.

Product
Scan results now load faster and remain consistent over time, with stable URLs and on-demand rescans for fresh security data.

Product
Socket's new Alert Details page is designed to surface more context, with a clearer layout, reachability dependency chains, and structured review.