Skip to content

Commit 7453a1d

Browse files
refactor: ♻️ prevent onChange when component loads (#29)
1 parent 7f666ea commit 7453a1d

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

src/index.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { css, setup } from "goober";
2-
import React, { useEffect, useState } from "react";
2+
import React, { useState } from "react";
3+
import { useDidUpdateEffect } from "./use-did-update-effect";
34

45
import cc from "./classnames";
56
import Tag from "./tag";
@@ -86,11 +87,11 @@ export const TagsInput = ({
8687
}: TagsInputProps) => {
8788
const [tags, setTags] = useState<any>(value || []);
8889

89-
useEffect(() => {
90+
useDidUpdateEffect(() => {
9091
onChange && onChange(tags);
9192
}, [tags]);
9293

93-
useEffect(() => {
94+
useDidUpdateEffect(() => {
9495
if (JSON.stringify(value) !== JSON.stringify(tags)) {
9596
setTags(value);
9697
}

src/use-did-update-effect.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { useEffect, useRef } from "react";
2+
3+
export function useDidUpdateEffect(fn, inputs) {
4+
const didMountRef = useRef(false);
5+
6+
useEffect(() => {
7+
if (didMountRef.current) fn();
8+
else didMountRef.current = true;
9+
}, inputs);
10+
}

0 commit comments

Comments
 (0)