React est incroyablement puissant, mais le maîtriser signifie aller au-delà des bases et apprendre quelques astuces moins connues pour rationaliser le développement. Voici un aperçu de mes 20 astuces React préférées qui peuvent augmenter votre productivité et vous aider à écrire un code plus propre et plus efficace. Passons directement aux exemples !
Évitez les instructions if verbeuses pour le rendu conditionnel avec évaluation de court-circuit.
{isLoading && <Spinner />}
Cela rend le
La bibliothèque de noms de classes facilite l'application conditionnelle de classes.
npm install classnames
import classNames from 'classnames'; const buttonClass = classNames({ 'btn': true, 'btn-primary': isPrimary, 'btn-secondary': !isPrimary, }); <button className={buttonClass}>Click Me</button>
Si un calcul est coûteux, mémorisez-le pour que React ne recalcule pas inutilement.
const sortedData = useMemo(() => data.sort(), [data]);
Ceci recalcule sortedData uniquement lorsque les données changent.
Évitez les rendus constants en anti-rebondissant les modifications d'entrée.
const [value, setValue] = useState(''); const [debouncedValue, setDebouncedValue] = useState(''); useEffect(() => { const handler = setTimeout(() => setDebouncedValue(value), 500); return () => clearTimeout(handler); }, [value]); <input value={value} onChange={(e) => setValue(e.target.value)} />
Encapsulez la logique dans un hook personnalisé pour la réutiliser dans tous les composants.
function useFetch(url) { const [data, setData] = useState(null); useEffect(() => { fetch(url).then(res => res.json()).then(setData); }, [url]); return data; } const Component = () => { const data = useFetch('/api/data'); return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>; };
Optimisez le temps de chargement en divisant vos composants.
const LazyComponent = React.lazy(() => import('./LazyComponent')); function App() { return ( <React.Suspense fallback={<div>Loading...</div>}> <LazyComponent /> </React.Suspense> ); }
Pour accéder aux valeurs d'état précédentes, utilisez useRef.
const [count, setCount] = useState(0); const prevCount = useRef(count); useEffect(() => { prevCount.current = count; }, [count]); console.log(`Previous: ${prevCount.current}, Current: ${count}`);
Si une fonction n'a pas besoin d'être modifiée, mémorisez-la avec useCallback.
const increment = useCallback(() => setCount(count + 1), [count]);
Déstructurez les accessoires directement dans les paramètres de la fonction.
const User = ({ name, age }) => ( <div>{name} is {age} years old</div> );
Enveloppez les éléments sans ajouter de nœud DOM supplémentaire.
<> <p>Paragraph 1</p> <p>Paragraph 2</p> </>
Détectez les erreurs dans les composants enfants pour éviter que l'ensemble de l'application ne plante.
class ErrorBoundary extends React.Component { state = { hasError: false }; static getDerivedStateFromError() { return { hasError: true }; } render() { if (this.state.hasError) return <h1>Something went wrong.</h1>; return this.props.children; } }
Détectez les bugs tôt en définissant les types d'accessoires.
{isLoading && <Spinner />}
Pour une logique d'état complexe, useReducer peut être plus efficace.
npm install classnames
Exécutez les effets après les mises à jour du DOM mais avant la peinture.
import classNames from 'classnames'; const buttonClass = classNames({ 'btn': true, 'btn-primary': isPrimary, 'btn-secondary': !isPrimary, }); <button className={buttonClass}>Click Me</button>
Créez un état global sans perçage d'accessoires.
const sortedData = useMemo(() => data.sort(), [data]);
La définition de fonctions en ligne provoque un nouveau rendu. Définissez-les plutôt à l’extérieur.
const [value, setValue] = useState(''); const [debouncedValue, setDebouncedValue] = useState(''); useEffect(() => { const handler = setTimeout(() => setDebouncedValue(value), 500); return () => clearTimeout(handler); }, [value]); <input value={value} onChange={(e) => setValue(e.target.value)} />
Gérez les valeurs nulles ou non définies avec élégance.
function useFetch(url) { const [data, setData] = useState(null); useEffect(() => { fetch(url).then(res => res.json()).then(setData); }, [url]); return data; } const Component = () => { const data = useFetch('/api/data'); return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>; };
Utilisez toujours des clés uniques lors du rendu des listes.
const LazyComponent = React.lazy(() => import('./LazyComponent')); function App() { return ( <React.Suspense fallback={<div>Loading...</div>}> <LazyComponent /> </React.Suspense> ); }
Les exportations nommées facilitent l'importation de composants spécifiques.
const [count, setCount] = useState(0); const prevCount = useRef(count); useEffect(() => { prevCount.current = count; }, [count]); console.log(`Previous: ${prevCount.current}, Current: ${count}`);
Puis importez si nécessaire :
const increment = useCallback(() => setCount(count + 1), [count]);
Enveloppez les composants avec des HOC pour ajouter une logique supplémentaire.
const User = ({ name, age }) => ( <div>{name} is {age} years old</div> );
Maîtriser ces astuces vous aidera à écrire du code React plus concis, lisible et efficace ! Bon codage !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!