Maison > interface Web > js tutoriel > le corps du texte

React vs React (RC) : principales différences et conseils de migration avec exemples

WBOY
Libérer: 2024-09-03 14:21:29
original
954 Les gens l'ont consulté

React vs React (RC): Key Differences and Migration Tips with Examples

React, la bibliothèque JavaScript populaire pour créer des interfaces utilisateur, continue d'évoluer à chaque nouvelle version. Dans cet article de blog, nous explorerons les principales différences entre React 18 et le prochain React 19 (actuellement au stade Release Candidate), fournirons des exemples de nouvelles fonctionnalités et proposerons des conseils de migration aux développeurs utilisant React avec Vite.

Table des matières

  1. Présentation
  2. Statut actuel de React 19
  3. Principales différences avec les exemples
    • Rendu côté serveur amélioré
    • Rendu simultané amélioré
    • Nouveaux Hooks et API
    • Optimisations des performances
  4. Conseils de migration
  5. Utiliser React 19 RC avec Vite
  6. Conclusion

Introduction

React 18 a introduit des changements importants, notamment le traitement par lots automatique, de nouvelles API pour le rendu simultané et les transitions. React 19, bien qu'encore en développement, vise à s'appuyer sur ces fondations avec d'autres améliorations et de nouvelles fonctionnalités.

État actuel de React 19

Depuis septembre 2024, React 19 est au stade Release Candidate (RC). Il est complet en fonctionnalités et prêt à être testé, mais n'est pas encore recommandé pour une utilisation en production. Les fonctionnalités et les API peuvent encore changer avant la version finale.

Principales différences avec les exemples

Plongeons dans les principales améliorations et nouvelles fonctionnalités attendues dans React 19, avec des exemples et des comparaisons avec React 18 le cas échéant.

Rendu amélioré côté serveur

  1. SSR de streaming amélioré

React 19 vise à optimiser davantage le streaming SSR. Bien que l'API puisse rester similaire à React 18, les améliorations de performances devraient être perceptibles.

Exemple (similaire dans React 18 et 19) :

// server.js
import { renderToPipeableStream } from 'react-dom/server';

app.get('/', (req, res) => {
  const { pipe } = renderToPipeableStream(<App />, {
    bootstrapScripts: ['/client.js'],
    onShellReady() {
      res.statusCode = 200;
      res.setHeader('Content-type', 'text/html');
      pipe(res);
    },
  });
});
Copier après la connexion
  1. Hydratation sélective raffinée

React 19 devrait améliorer l'hydratation sélective introduite dans React 18.

Exemple dans React 19 (la syntaxe peut être similaire à celle de React 18, mais avec un comportement amélioré) :

import { Suspense } from 'react';

function App() {
  return (
    <Suspense fallback={<Loading />}>
      <MainContent />
      <Suspense fallback={<SidebarLoading />}>
        <Sidebar />
      </Suspense>
    </Suspense>
  );
}
Copier après la connexion

Dans cet exemple, React 19 pourrait fournir une hydratation plus douce, en donnant la priorité au composant MainContent pendant le chargement de la barre latérale.

  1. Composants du serveur

React 19 devrait inclure une implémentation plus stable des composants serveur.

Exemple de composant serveur dans React 19 :

// Note: This syntax is speculative and may change
'use server';

import { db } from './database';

async function UserProfile({ userId }) {
  const user = await db.user.findUnique({ where: { id: userId } });
  return <div>{user.name}</div>;
}

export default UserProfile;
Copier après la connexion

Dans cet exemple, le composant UserProfile s'exécute sur le serveur, permettant un accès direct à la base de données sans exposer d'informations sensibles au client.

Rendu simultané amélioré

  1. Suspense amélioré

React 19 améliore le composant Suspense avec une meilleure gestion des replis.

Exemple de React 18 :

function ProfilePage({ userId }) {
  return (
    <Suspense fallback={<h1>Loading profile...</h1>}>
      <ProfileDetails userId={userId} />
      <Suspense fallback={<h2>Loading posts...</h2>}>
        <ProfileTimeline userId={userId} />
      </Suspense>
    </Suspense>
  );
}
Copier après la connexion

Amélioration potentielle de React 19 (spéculative) :

function ProfilePage({ userId }) {
  return (
    <Suspense
      fallback={<h1>Loading profile...</h1>}
      primaryContent={<ProfileDetails userId={userId} />}
    >
      <ProfileTimeline userId={userId} />
    </Suspense>
  );
}
Copier après la connexion

Dans cet exemple spéculatif de React 19, la propprimaryContent pourrait permettre aux développeurs de spécifier quel contenu doit être prioritaire lors du chargement.

  1. Lot de rendu automatique étendu

React 18 a introduit le traitement par lots automatique pour setState et les hooks. React 19 pourrait étendre cela à davantage de scénarios.

Exemple de React 18 :

function Counter() {
  const [count, setCount] = useState(0);

  function handleClick() {
    setCount(c => c + 1); // Does not re-render yet
    setCount(c => c + 1); // Does not re-render yet
    // React will only re-render once at the end (that's batching!)
  }

  return <button onClick={handleClick}>{count}</button>;
}
Copier après la connexion

React 19 pourrait étendre ce traitement par lots à davantage de scénarios, incluant potentiellement des opérations asynchrones.

  1. Rendu précis basé sur les priorités

React 19 pourrait introduire un contrôle plus granulaire sur les priorités de rendu.

Exemple potentiel de React 19 (spéculatif) :

import { useDeferredValue, startTransition } from 'react';

function SearchResults({ query }) {
  const deferredQuery = useDeferredValue(query);

  return (
    <>
      <div>Searching for: {query}</div>
      <Suspense fallback={<Spinner />}>
        <Results query={deferredQuery} />
      </Suspense>
    </>
  );
}

function handleSearch(input) {
  startTransition(() => {
    setSearchQuery(input);
  });
}
Copier après la connexion

Dans cet exemple, React 19 pourrait fournir un contrôle plus précis sur la manière dont les différentes parties de l'interface utilisateur sont mises à jour en réponse aux entrées de l'utilisateur.

Nouveaux hooks et API

  1. useEvent Hook

React 19 devrait introduire le hook useEvent pour résoudre les problèmes de fermeture obsolètes.

Problème React 18 :

function ChatRoom({ roomId }) {
  const [message, setMessage] = useState('');

  function handleSend() {
    // This might use a stale `roomId` if the component re-renders
    sendMessage(roomId, message);
  }

  return <button onClick={handleSend}>Send</button>;
}
Copier après la connexion

Solution potentielle React 19 avec useEvent :

function ChatRoom({ roomId }) {
  const [message, setMessage] = useState('');

  const handleSend = useEvent(() => {
    // This will always use the current `roomId`
    sendMessage(roomId, message);
  });

  return <button onClick={handleSend}>Send</button>;
}
Copier après la connexion
  1. API de contexte améliorée

React 19 peut inclure des améliorations de l'API Context pour répondre aux problèmes de performances.

Exemple de React 18 :

const ThemeContext = React.createContext('light');

function App() {
  const [theme, setTheme] = useState('light');
  return (
    <ThemeContext.Provider value={theme}>
      <Header />
      <Main />
      <Footer />
    </ThemeContext.Provider>
  );
}
Copier après la connexion

Amélioration potentielle de React 19 (spéculative) :

const ThemeContext = React.createContext('light', (prev, next) => prev === next);

function App() {
  const [theme, setTheme] = useState('light');
  return (
    <ThemeContext.Provider value={theme}>
      <Header />
      <Main />
      <Footer />
    </ThemeContext.Provider>
  );
}
Copier après la connexion

Dans cet exemple spéculatif, le contexte peut inclure une fonction de comparaison pour éviter les nouveaux rendus inutiles.

Optimisations des performances

Bien que de nombreuses optimisations de performances se produisent sous le capot, certaines peuvent être visibles pour les développeurs :

  1. Algorithme de comparaison amélioré

React 19 devrait optimiser le processus de réconciliation. Cela ne nécessitera peut-être pas de modifications de votre code, mais pourrait entraîner des mises à jour plus rapides pour les interfaces utilisateur complexes.

  1. Memory Usage Improvements

React 19 may include optimizations to reduce memory usage. Again, this might not require code changes but could improve performance, especially for large applications.

  1. Better Tree Shaking

React 19 might improve tree shaking capabilities. This could result in smaller bundle sizes when using build tools like Vite.

Example vite.config.js that might better leverage React 19's tree shaking:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],
  build: {
    rollupOptions: {
      output: {
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return 'vendor';
          }
        }
      }
    }
  }
})
Copier après la connexion

Migration Tips

  1. Stay Informed: Keep an eye on the official React blog and documentation for updates.
  2. Experiment in Non-Production Environments: Try the React 19 RC in development or staging environments.
  3. Review Deprecated APIs: Check the documentation for any deprecated APIs and plan updates accordingly.
  4. Leverage New Features Gradually: Implement new features in non-critical parts of your application first.
  5. Optimize Rendering: Review your component structure and use of Suspense boundaries.
  6. Comprehensive Testing: Thoroughly test your application, especially areas relying on React's internal APIs.

Using React 19 RC with Vite

To experiment with the React 19 Release Candidate using Vite:

  1. Create a new Vite project:
   npm create vite@latest my-react-19-rc-app -- --template react
Copier après la connexion
  1. Navigate to the project directory:
   cd my-react-19-rc-app
Copier après la connexion
  1. Install the React 19 RC versions:
   npm install react@rc react-dom@rc
Copier après la connexion
  1. Update your vite.config.js:
   import { defineConfig } from 'vite'
   import react from '@vitejs/plugin-react'

   export default defineConfig({
     plugins: [react()],
     esbuild: {
       jsxInject: `import React from 'react'`
     },
     optimizeDeps: {
       include: ['react', 'react-dom']
     }
   })
Copier après la connexion
  1. Start the development server:
   npm run dev
Copier après la connexion

Remember, using the RC version in production is not recommended.

Conclusion

While React 19 is still in the Release Candidate stage, it promises exciting improvements and new features. From enhanced server-side rendering to new hooks and performance optimizations, there's much to explore in React 19.

As the release date approaches, stay tuned to the official React documentation and community resources for the most up-to-date information. By staying informed and gradually adopting new features as they become stable, you'll be well-positioned to leverage the improvements in React 19 for your projects.

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!