React a considérablement évolué depuis sa création, et avec l'essor des Hooks, les composants fonctionnels sont devenus l'approche incontournable pour créer des applications React. Cette aide-mémoire fournit un aperçu des concepts clés, des fonctionnalités et des meilleures pratiques pour l'utilisation des composants fonctionnels dans React.
Un composant fonctionnel est une simple fonction JavaScript qui renvoie un élément React.
const MyComponent = () => { return <div>Hello, World!</div>; };
JSX est une extension de syntaxe qui vous permet d'écrire du code de type HTML dans votre JavaScript.
const MyComponent = () => { return ( <div> <h1>Welcome to React</h1> </div> ); };
Les accessoires sont utilisés pour transmettre des données d'un composant parent à un composant enfant.
const Greeting = ({ name }) => { return <h1>Hello, {name}!</h1>; }; // Usage <Greeting name="Alice" />
Vous pouvez définir des accessoires par défaut pour un composant.
const Greeting = ({ name = "Guest" }) => { return <h1>Hello, {name}!</h1>; };
Le hook useState vous permet d'ajouter un état aux composants fonctionnels.
import { useState } from 'react'; const Counter = () => { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); };
Le hook useEffect vous permet d'effectuer des effets secondaires dans les composants fonctionnels.
import { useEffect } from 'react'; const DataFetcher = () => { useEffect(() => { fetch('/api/data') .then(response => response.json()) .then(data => console.log(data)); }, []); // Empty dependency array means it runs once return <div>Data fetched. Check console.</div>; };
Rendu différents éléments de l'interface utilisateur en fonction de certaines conditions.
const LoginMessage = ({ isLoggedIn }) => { return ( <div> {isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please log in.</h1>} </div> ); };
Rendez des listes de données et utilisez des clés pour aider React à identifier les éléments qui ont changé.
const ItemList = ({ items }) => { return ( <ul> {items.map(item => ( <li key={item.id}>{item.name}</li> ))} </ul> ); };
Gérer les événements dans les composants fonctionnels.
const Button = () => { const handleClick = () => { alert('Button clicked!'); }; return <button onClick={handleClick}>Click Me</button>; };
Gérez la saisie du formulaire avec des composants contrôlés.
const Form = () => { const [value, setValue] = useState(''); const handleChange = (e) => { setValue(e.target.value); }; const handleSubmit = (e) => { e.preventDefault(); alert(`Submitted value: ${value}`); }; return ( <form onSubmit={handleSubmit}> <input type="text" value={value} onChange={handleChange} /> <button type="submit">Submit</button> </form> ); };
Utilisez l'API Context pour la gestion de l'état dans l'arborescence des composants.
import { createContext, useContext } from 'react'; const MyContext = createContext(); const MyProvider = ({ children }) => { const value = 'Hello from context'; return ( <MyContext.Provider value={value}> {children} </MyContext.Provider> ); }; const MyComponent = () => { const contextValue = useContext(MyContext); return <div>{contextValue}</div>; };
Créez une logique réutilisable avec des hooks personnalisés.
import { useState, useEffect } from 'react'; const useFetch = (url) => { const [data, setData] = useState(null); useEffect(() => { fetch(url) .then(response => response.json()) .then(data => setData(data)); }, [url]); return data; }; // Usage const DataComponent = () => { const data = useFetch('/api/data'); return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>; };
Optimisez les performances en mémorisant des calculs coûteux.
import { useMemo } from 'react'; const ExpensiveComponent = ({ number }) => { const expensiveCalculation = useMemo(() => { // Assume this is a computationally expensive operation return number * 2; }, [number]); return <div>{expensiveCalculation}</div>; };
Utilisez useCallback pour mémoriser les fonctions afin d'éviter les nouveaux rendus inutiles.
import { useCallback } from 'react'; const Button = ({ onClick }) => { return <button onClick={onClick}>Click me</button>; }; const ParentComponent = () => { const handleClick = useCallback(() => { console.log('Button clicked'); }, []); return <Button onClick={handleClick} />; };
Gérez la logique d'état complexe avec le useReducer Hook.
import { useReducer } from 'react'; const reducer = (state, action) => { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: throw new Error(); } }; const Counter = () => { const [state, dispatch] = useReducer(reducer, { count: 0 }); return ( <div> <p>Count: {state.count}</p> <button onClick={() => dispatch({ type: 'increment' })}>Increment</button> <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button> </div> ); };
Utilisez des fragments pour regrouper plusieurs éléments sans ajouter de nœuds supplémentaires au DOM.
const MyComponent = () => { return ( <> <h1>Title</h1> <p>Description</p> </> ); };
Rendu les enfants dans un nœud DOM en dehors de la hiérarchie DOM du composant parent.
import { createPortal } from 'react-dom'; const Modal = ({ children }) => { return createPortal( <div className="modal"> {children} </div>, document.getElementById('modal-root') ); };
Utilisez des composants de classe pour les limites d'erreur.
import { Component } from 'react'; class ErrorBoundary extends Component { constructor(props) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(error) { return { hasError: true }; } componentDidCatch(error, errorInfo) { console.log(error, errorInfo); } render() { if (this.state.hasError) { return <h1>Something went wrong.</h1>; } return this.props.children; } } // Usage <ErrorBoundary> <MyComponent /> </ErrorBoundary>
Importez dynamiquement des composants pour réduire le temps de chargement initial.
import { lazy, Suspense } from 'react'; const LazyComponent = lazy(() => import('./LazyComponent')); const App = () => { return ( <Suspense fallback={<div>Loading...</div>}> <LazyComponent /> </Suspense> ); };
Utilisez les types d'accessoires pour documenter et appliquer les types d'accessoires de composants.
import PropTypes from 'prop-types'; const Greeting = ({ name }) => { return <h1>Hello, {name}!</h1>; }; Greeting.propTypes = { name: PropTypes.string.isRequired, };
Les composants fonctionnels offrent un moyen propre et simple de créer des applications React, en particulier grâce aux puissantes fonctionnalités introduites par Hooks. Cette aide-mémoire fournit une référence rapide aux concepts essentiels, vous aidant à rédiger du code React efficace et efficient.
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!