Skip to content

Commit 12751d9

Browse files
committed
export memoized version of Image
1 parent 637fc5a commit 12751d9

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

src/Image.tsx

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,44 @@
1-
import { useState, MouseEvent } from "react";
1+
import {useState, MouseEvent, memo} from "react";
22
import { CheckButton } from "./CheckButton";
33
import { ImageExtended, ImageProps } from "./types";
44
import * as styles from "./styles";
55
import { getStyle } from "./styles";
66

7-
export const Image = <T extends ImageExtended>({
7+
const imagePropsAreEqual = (prevProps: ImageProps, currProps: ImageProps) => {
8+
// states are the same iff the props are the same
9+
10+
const {
11+
item: prevItem,
12+
index: prevIndex,
13+
margin: prevMargin,
14+
height: prevHeight,
15+
isSelectable: prevIsSelectable,
16+
} = prevProps;
17+
18+
const {
19+
item: currItem,
20+
index: currIndex,
21+
margin: currMargin,
22+
height: currHeight,
23+
isSelectable: currIsSelectable,
24+
} = currProps;
25+
26+
return (
27+
prevItem.src === currItem.src &&
28+
prevItem.width === currItem.width &&
29+
prevItem.height === currItem.height &&
30+
prevItem.scaledHeight === currItem.scaledHeight &&
31+
prevItem.scaledWidth === currItem.scaledWidth &&
32+
prevItem.viewportWidth === currItem.viewportWidth &&
33+
prevItem.marginLeft === currItem.marginLeft &&
34+
prevIndex === currIndex &&
35+
prevMargin === currMargin &&
36+
prevHeight === currHeight &&
37+
prevIsSelectable === currIsSelectable
38+
);
39+
};
40+
41+
const ImageBase = <T extends ImageExtended>({
842
item,
943
thumbnailImageComponent: ThumbnailImageComponent,
1044
isSelectable = true,
@@ -132,3 +166,5 @@ export const Image = <T extends ImageExtended>({
132166
</div>
133167
);
134168
};
169+
170+
export const Image = memo(ImageBase, imagePropsAreEqual);

0 commit comments

Comments
 (0)