Middle
Jaká pravidla platí pro psaní hooků v Reactu?
sobes.tech AI
Odpověď od AI
- Voláte hooky pouze na nejvyšší úrovni funkčních komponent nebo uvnitř jiných vlastních hooků. Nevoláte hooky v cyklech, podmínkách nebo vnořených funkcích.
- Voláte hooky pouze uvnitř React funkčních komponent. Nevoláte je v běžných JavaScriptových funkcích nebo ve třídních komponentách.
- Použití
useCallbackpro memoizaci funkcí auseMemopro memoizaci výpočtů pomáhá optimalizovat výkon. - Použijte
useEffectpro vedlejší efekty (načítání dat, předplatné atd.) a určete pole závislostí pro řízení provádění efektu. - Dodržujte pořadí volání hooků při každém renderu komponenty. React se na toto pořadí spoléhá, aby správně spojil stav a efekty.
- Používejte stabilní závislosti v polích závislostí
useEffect,useCallback,useMemo. Nezasílejte objekty nebo funkce, které jsou vytvářeny při každém renderu bez potřeby. - Vytvářejte vlastní vlastní hooky pro znovupoužití logiky stavu mezi komponentami. Názvy vlastních hooků by měly začínat
use.
// Správný příklad: volání hooků na nejvyšší úrovni
function MyComponent() {
const [count, setCount] = useState(0); // Na nejvyšší úrovni
useEffect(() => { // Na nejvyšší úrovni
document.title = `Stiskli jste ${count} krát`;
}, [count]); // Pole závislostí
const handleClick = useCallback(() => { // Na nejvyšší úrovni
setCount(c => c + 1);
}, []); // Memoizovaná funkce
return (
<div>
<p>Stiskli jste {count} krát</p>
<button onClick={handleClick}>
Klikněte na mě
</button>
</div>
);
}
// Nesprávný příklad: volání hooku v podmínce
// function MyComponentWithBadHook() {
// if (someCondition) {
// const [count, setCount] = useState(0); // NESPRÁVNĚ: v podmínce
// }
// // ...
// }
// Nesprávný příklad: volání hooku v cyklu
// function MyComponentWithAnotherBadHook() {
// for (let i = 0; i < 5; i++) {
// const [value, setValue] = useState(i); // NESPRÁVNĚ: v cyklu
// }
// // ...
// }