Maison >interface Web >js tutoriel >Optimisation automatique React : adieu mémo, useMemo et useCallback ?
React 19 apporte des améliorations significatives à l'optimisation des performances, notamment dans la façon dont il gère la mémorisation. Explorons comment memo, useMemo et useCallback ont évolué et comment ils sont désormais optimisés par défaut.
Auparavant, dans React 18, les développeurs devaient soigneusement réfléchir au moment d'utiliser des techniques de mémorisation pour éviter les nouveaux rendus inutiles et optimiser les performances. React 19 change ce paradigme en introduisant des optimisations automatiques qui rendent ces outils plus efficaces et, dans de nombreux cas, inutiles.
Le mémo de React 19 est désormais beaucoup plus intelligent quant au moment de restituer les composants. Le framework suit automatiquement les modifications apportées aux accessoires et leur impact sur la sortie du composant.
// React 18 const UserCard = memo(({ user, onUpdate }) => { return ( <div> <h2>{user.name}</h2> <button onClick={onUpdate}>Update</button> </div> ); }); // React 19 // memo is now automatically optimized const UserCard = ({ user, onUpdate }) => { return ( <div> <h2>{user.name}</h2> <button onClick={onUpdate}>Update</button> </div> ); });
// React 18 const CommentThread = memo(({ comments, onReply }) => { return ( <div> {comments.map(comment => ( <Comment key={comment.id} {...comment} onReply={onReply} /> ))} </div> ); }); // React 19 const CommentThread = ({ comments, onReply }) => { return ( <div> {comments.map(comment => ( <Comment key={comment.id} {...comment} onReply={onReply} /> ))} </div> ); });
useMemo de React 19 est désormais optimisé pour détecter automatiquement quand la mémorisation est bénéfique, réduisant ainsi le besoin d'optimisation manuelle.
// React 18 const ExpensiveChart = ({ data }) => { const processedData = useMemo(() => { return data.map(item => ({ ...item, value: complexCalculation(item.value) })); }, [data]); return <ChartComponent data={processedData} />; }; // React 19 const ExpensiveChart = ({ data }) => { // React 19 automatically detects expensive operations const processedData = data.map(item => ({ ...item, value: complexCalculation(item.value) })); return <ChartComponent data={processedData} />; };
// React 18 const UserProfile = ({ user }) => { const userStyles = useMemo(() => ({ background: user.premium ? 'gold' : 'silver', border: `2px solid ${user.active ? 'green' : 'gray'}` }), [user.premium, user.active]); return <div> <h3> Example 3: Derived State </h3> <pre class="brush:php;toolbar:false">// React 18 const FilteredList = ({ items, filter }) => { const filteredItems = useMemo(() => items.filter(item => item.category === filter), [items, filter] ); return <List items={filteredItems} />; }; // React 19 const FilteredList = ({ items, filter }) => { // React 19 automatically optimizes derived state const filteredItems = items.filter(item => item.category === filter); return <List items={filteredItems} />; };
useCallback de React 19 est désormais plus intelligent en matière de stabilité des fonctions et d'égalité des références.
// React 18 const TodoList = ({ todos, onToggle }) => { const handleToggle = useCallback((id) => { onToggle(id); }, [onToggle]); return todos.map(todo => ( <TodoItem key={todo.id} {...todo} onToggle={handleToggle} /> )); }; // React 19 const TodoList = ({ todos, onToggle }) => { // React 19 automatically maintains function stability const handleToggle = (id) => { onToggle(id); }; return todos.map(todo => ( <TodoItem key={todo.id} {...todo} onToggle={handleToggle} /> )); };
// React 18 const SearchComponent = ({ onSearch, searchParams }) => { const debouncedSearch = useCallback( debounce((term) => { onSearch({ ...searchParams, term }); }, 300), [searchParams, onSearch] ); return <input onChange={e => debouncedSearch(e.target.value)} />; }; // React 19 const SearchComponent = ({ onSearch, searchParams }) => { // React 19 handles function stability automatically const debouncedSearch = debounce((term) => { onSearch({ ...searchParams, term }); }, 300); return <input onChange={e => debouncedSearch(e.target.value)} />; };
// React 18 const DataGrid = ({ data, onSort, onFilter }) => { const handleHeaderClick = useCallback((column) => { onSort(column); onFilter(column); }, [onSort, onFilter]); return ( <table> <thead> {columns.map(column => ( <th key={column} onClick={() => handleHeaderClick(column)}> {column} </th> ))} </thead> {/* ... */} </table> ); }; // React 19 const DataGrid = ({ data, onSort, onFilter }) => { // React 19 optimizes function creation and stability const handleHeaderClick = (column) => { onSort(column); onFilter(column); }; return ( <table> <thead> {columns.map(column => ( <th key={column} onClick={() => handleHeaderClick(column)}> {column} </th> ))} </thead> {/* ... */} </table> ); };
Bien que les optimisations automatiques de React 19 soient puissantes, il existe encore des cas où la mémorisation explicite peut être bénéfique :
Les améliorations apportées à la mémorisation par React 19 facilitent l'écriture d'applications performantes sans gérer manuellement l'optimisation. Le framework gère désormais automatiquement de nombreux scénarios d'optimisation courants, conduisant à un code plus propre et à de meilleures performances prêtes à l'emploi.
N'oubliez pas que même si ces optimisations sont puissantes, comprendre leur fonctionnement peut vous aider à prendre de meilleures décisions quant au moment de s'appuyer sur l'optimisation automatique plutôt que de mettre en œuvre des optimisations manuelles pour des cas d'utilisation spécifiques.
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!