Skip to content

Commit e22b929

Browse files
Copilotastandrik
andcommitted
feat: add rules to avoid useEffect and prefer direct useCallback approaches
Co-authored-by: astandrik <[email protected]>
1 parent 700082c commit e22b929

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

.github/copilot-instructions.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff 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(() =>
3335
const 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

AGENTS.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ src/
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(() =>
113115
const 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

CLAUDE.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ src/
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(() =>
113115
const 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

0 commit comments

Comments
 (0)