Skip to content

Commit b9eab90

Browse files
remove useCallback reconnection sandpack example
1 parent 405912c commit b9eab90

File tree

1 file changed

+1
-74
lines changed

1 file changed

+1
-74
lines changed

src/content/reference/react/useRef.md

Lines changed: 1 addition & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ export default function ReactLogo() {
663663
}
664664
```
665665
666-
To avoid unnecessary reconnections wrap your ref callback function in [useCallback](/reference/react/useCallback). Make sure to add any dependancies to the dependency array so the ref callback called with updated props when necessary.
666+
To avoid unnecessary reconnections wrap your ref callback function in [useCallback](/reference/react/useCallback). Make sure to add any dependancies to the `useCallback` dependency array. This will ensure the ref callback is called with updated props when necessary.
667667
668668
```js
669669
export default function ReactLogo() {
@@ -675,79 +675,6 @@ export default function ReactLogo() {
675675
}
676676
```
677677
678-
<Sandpack>
679-
680-
```js
681-
import { useState, useCallback } from "react";
682-
683-
function WithoutCallback() {
684-
const [count, setCount] = useState(0);
685-
686-
// 🚩 without useCallback, the callback changes every
687-
// render, which causes the listener to reconnect
688-
const handleRefEffect = (node) => {
689-
function onClick() {
690-
setCount((count) => count + 1);
691-
}
692-
console.log("without: adding event listener", node);
693-
node.addEventListener("click", onClick);
694-
return () => {
695-
console.log("without: removing event listener", node);
696-
node.removeEventListener("click", onClick);
697-
};
698-
};
699-
700-
return <button ref={handleRefEffect}>Count {count}</button>;
701-
}
702-
703-
function WithCallback() {
704-
const [count, setCount] = useState(0);
705-
706-
// ✅ with useCallback, the callback is stable
707-
// so the listener doesn't reconnect each time
708-
const handleRefEffect = useCallback((node) => {
709-
function onClick() {
710-
setCount((count) => count + 1);
711-
}
712-
console.log("with: adding event listener", node);
713-
node.addEventListener("click", onClick);
714-
return () => {
715-
console.log("with: removing event listener", node);
716-
node.removeEventListener("click", onClick);
717-
};
718-
}, []);
719-
720-
return <button ref={handleRefEffect}>Count {count}</button>;
721-
}
722-
723-
export default function App() {
724-
const [count, setCount] = useState(0);
725-
726-
const handleRefEffect = (node) => {
727-
function onClick() {
728-
setCount((count) => count + 1);
729-
}
730-
console.log("adding event listener", node);
731-
node.addEventListener("click", onClick);
732-
return () => {
733-
console.log("removing event listener", node);
734-
node.removeEventListener("click", onClick);
735-
};
736-
};
737-
738-
return (
739-
<>
740-
<h1>without useCallback</h1>
741-
<WithoutCallback />
742-
<h1>with useCallback</h1>
743-
<WithCallback />
744-
</>
745-
);
746-
}
747-
```
748-
749-
</Sandpack>
750-
751678
</DeepDive>
752679
753680
<DeepDive>

0 commit comments

Comments
 (0)