File tree Expand file tree Collapse file tree 3 files changed +39
-0
lines changed Expand file tree Collapse file tree 3 files changed +39
-0
lines changed Original file line number Diff line number Diff line change @@ -24,6 +24,8 @@ This is a React-based monitoring and management interface for YDB clusters. The
2424- ** ALWAYS** use ` useMemo ` for expensive computations, object/array creation
2525- ** ALWAYS** use ` useCallback ` for functions in effect dependencies
2626- ** ALWAYS** memoize table columns, filtered data, computed values
27+ - ** AVOID** ` useEffect ` when possible - prefer direct approaches with ` useCallback `
28+ - ** PREFER** direct event handlers and callbacks over useEffect for user interactions
2729
2830``` typescript
2931// ✅ REQUIRED patterns
@@ -33,6 +35,17 @@ const displaySegments = useMemo(() =>
3335const handleClick = useCallback (() => {
3436 // logic
3537}, [dependency ]);
38+
39+ // ✅ PREFER direct callbacks over useEffect
40+ const handleInputChange = useCallback ((value : string ) => {
41+ setSearchTerm (value );
42+ onSearchChange ?.(value );
43+ }, [onSearchChange ]);
44+
45+ // ❌ AVOID unnecessary useEffect
46+ // useEffect(() => {
47+ // onSearchChange?.(searchTerm);
48+ // }, [searchTerm, onSearchChange]);
3649```
3750
3851### Memory & Display Safety
Original file line number Diff line number Diff line change 104104- ** ALWAYS** use ` useMemo ` for expensive computations and object/array creation
105105- ** ALWAYS** use ` useCallback ` for functions passed to dependencies
106106- ** ALWAYS** memoize table columns, filtered data, and computed values
107+ - ** AVOID** ` useEffect ` when possible - prefer direct approaches with ` useCallback `
108+ - ** PREFER** direct event handlers and callbacks over useEffect for user interactions
107109
108110``` typescript
109111// ✅ REQUIRED patterns
@@ -113,6 +115,17 @@ const displaySegments = useMemo(() =>
113115const handleClick = useCallback (() => {
114116 // logic
115117}, [dependency ]);
118+
119+ // ✅ PREFER direct callbacks over useEffect
120+ const handleInputChange = useCallback ((value : string ) => {
121+ setSearchTerm (value );
122+ onSearchChange ?.(value );
123+ }, [onSearchChange ]);
124+
125+ // ❌ AVOID unnecessary useEffect
126+ // useEffect(() => {
127+ // onSearchChange?.(searchTerm);
128+ // }, [searchTerm, onSearchChange]);
116129```
117130
118131### Display Safety
Original file line number Diff line number Diff line change 104104- ** ALWAYS** use ` useMemo ` for expensive computations and object/array creation
105105- ** ALWAYS** use ` useCallback ` for functions passed to dependencies
106106- ** ALWAYS** memoize table columns, filtered data, and computed values
107+ - ** AVOID** ` useEffect ` when possible - prefer direct approaches with ` useCallback `
108+ - ** PREFER** direct event handlers and callbacks over useEffect for user interactions
107109
108110``` typescript
109111// ✅ REQUIRED patterns
@@ -113,6 +115,17 @@ const displaySegments = useMemo(() =>
113115const handleClick = useCallback (() => {
114116 // logic
115117}, [dependency ]);
118+
119+ // ✅ PREFER direct callbacks over useEffect
120+ const handleInputChange = useCallback ((value : string ) => {
121+ setSearchTerm (value );
122+ onSearchChange ?.(value );
123+ }, [onSearchChange ]);
124+
125+ // ❌ AVOID unnecessary useEffect
126+ // useEffect(() => {
127+ // onSearchChange?.(searchTerm);
128+ // }, [searchTerm, onSearchChange]);
116129```
117130
118131### Display Safety
You can’t perform that action at this time.
0 commit comments