Nouveau : Datasets open source gratuits disponibles !Decouvrir →
Intermediaire 25 min Next.js

Zustand avec Next.js : guide complet

Pourquoi Zustand avec Next.js : guide complet ?

Au quotidien, les développeurs de front-end sont souvent confrontés à la gestion des états complexes dans leurs applications React. Les bibliothèques comme Redux ou MobX offrent des solutions robustes mais peuvent être assez verbeuses et complexes à mettre en place. C'est là que Zustand entre en jeu.

Zustand est une solution plus simple et réactive pour gérer l'état de votre application React. Il est conçu pour être facile à utiliser, performant et évolutif. Un cas d'usage concret pourrait être la gestion des informations utilisateur dans une application e-commerce : chaque fois que l'utilisateur change d'article ou ajoute un produit au panier, Zustand permettra de mettre à jour automatiquement toutes les composantes qui affichent ces informations.

Prerequis

Avant de commencer ce tutoriel, vous devrez avoir les éléments suivants :

  • Connaissance intermédiaire du React
  • Une version récente d'Node.js et npm installée (v14.0.0 ou plus)
  • Visual Studio Code avec l'extension ESLint recommandée

Concepts fondamentaux

1. Installation de Zustand

Pour installer Zustand, vous utiliserez npm :

npm install zustand

2. Création d'un état global

Un état global est un objet qui contient toutes les données que vos composants peuvent lire ou modifier.

// store.js
import create from 'zustand';

const useStore = create((set) => ({
  count: 0,
  increment: () => set(state => ({ count: state.count + 1 })),
  decrement: () => set(state => ({ count: state.count - 1 }))
}));

export default useStore;

3. Utilisation de l'état global dans un composant

Maintenant, vous pouvez utiliser cet état dans vos composants React.

// Counter.js
import useStore from '../store';

const Counter = () => {
  const count = useStore(state => state.count);
  const increment = useStore(state => state.increment);
  const decrement = useStore(state => state.decrement);

  return (
    <div>
      <h1>Count: {count}</h1>
      <button onClick={increment}>Increment</button>
      <button onClick={decrement}>Decrement</button>
    </div>
  );
};

export default Counter;

Mise en pratique : projet fil rouge

Dans ce tutoriel, nous allons créer une application simple de compteur à rebours. Vous aurez besoin d'un fichier index.js pour le rendu et un autre fichier store.js pour la gestion de l'état.

Étape 1: Création du store Zustand

// store.js
import create from 'zustand';

const useCountdownStore = create((set) => ({
  timeLeft: 60,
  startTimer: () => set(state => ({ timerId: setInterval(() => {
    if (state.timeLeft > 0) {
      set(state => ({ timeLeft: state.timeLeft - 1 }));
    } else {
      clearInterval(state.timerId);
    }
  }, 1000)}))),
  stopTimer: () => set(state => ({ timerId: null, timeLeft: 60 }))
}));

export default useCountdownStore;

Étape 2: Création du composant de compteur

// Countdown.js
import useCountdownStore from '../store';

const Countdown = () => {
  const timeLeft = useCountdownStore(state => state.timeLeft);
  const startTimer = useCountdownStore(state => state.startTimer);
  const stopTimer = useCountdownStore(state => state.stopTimer);

  return (
    <div>
      <h1>Time left: {timeLeft}s</h1>
      <button onClick={startTimer}>Start Timer</button>
      <button onClick={stopTimer}>Stop Timer</button>
    </div>
  );
};

export default Countdown;

Étape 3: Rendu de l'application

// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import Countdown from './Countdown';

const App = () => (
  <React.StrictMode>
    <h1>Countdown Timer</h1>
    <Countdown />
  </React.StrictMode>
);

ReactDOM.render(<App />, document.getElementById('root'));

Erreurs frequentes et debugging

1. Erreur : "Uncaught ReferenceError: set is not defined"

## ❌ Mauvais
const store = create((set) => ({
  count: 0,
  increment() { // Erreur ici
    set({ count: state.count + 1 });
  }
}));

## ✅ Correct
const store = create((set) => ({
  count: 0,
  increment: () => set(state => ({ count: state.count + 1 }))
}));

2. Erreur : "Cannot read property 'timeLeft' of undefined"

## ❌ Mauvais
const timeLeft = useCountdownStore().timeLeft; // Erreur ici

## ✅ Correct
const timeLeft = useCountdownStore(state => state.timeLeft);

3. Erreur : "Invalid hook call"

Les hooks ne peuvent être appelés que à la racine d'un composant ou dans un autre hook personnalisé.

// ❌ Mauvais
if (condition) {
  const count = useStore(state => state.count);
}

## ✅ Correct
const count = useStore(state => state.count);

Pour aller plus loin

  1. Persistez l'état : Utilisez des bibliothèques comme zustand-middleware-persist pour sauvegarder l'état de votre application entre les sessions.
  2. Middleware : Créez vos propres middleware pour ajouter des fonctionnalités comme le logging ou la validation.
  3. Reactivity : Apprenez comment Zustand exploite la réactivité de React pour efficacement mettre à jour les composants.

Défi pratique : Ajoutez une fonctionnalité pour reset l'heure du compteur et affichez-le dans le UI.


Ce tutoriel vous a montré comment utiliser Zustand avec Next.js pour gérer facilement les états globaux de votre application. En suivant ces étapes, vous devriez être capable de créer des applications React plus robustes et performantes.

Besoin d'aide sur Next.js ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Qu'est-ce que Zustand dans le contexte de Next.js ?
Zustand est un petit butin JavaScript pour la gestion d'état global dans les applications React, y compris celles basées sur Next.js. Il permet aux développeurs de gérer l'état de leur application de manière plus simple et efficace.
Comment installer Zustand dans un projet Next.js ?
Pour installer Zustand, vous pouvez utiliser la commande npm : 'npm install zustand'. Une fois installé, vous pouvez l'importer dans votre composant React et le configurer pour gérer l'état de votre application.
Pouvez-vous expliquer comment utiliser Zustand pour un state global dans une application Next.js ?
Oui, avec Zustand, vous pouvez créer un magasin d'état global en utilisant la fonction 'create' fournie par Zustand. Vous définissez ensuite des fonctions pour modifier l'état et les rendre accessibles à travers votre application. Les composants peuvent s'abonner à ces états et se reprendre automatiquement lorsqu'ils changent.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.