React - useState : Gestion d'État Local

C'est lui qui va te permettre de mémoriser et modifier des données dans tes composants. Sans lui, ton composant est stateless (sans état).
( l'équivalent de notre variable un peu dans l'idée )


Pourquoi useState ?

Avant les Hooks (Class Components)

// ANCIEN - Class Component (verbeux et compliqué)
class CompteurOldSchool extends React.Component {
  constructor(props) {
    super(props)
    this.state = { count: 0, name: '' }
    this.handleClick = this.handleClick.bind(this)
  }

  handleClick() {
    this.setState({ count: this.state.count + 1 })
  }

  render() {
    return (
      <div>
        <p>Count: {this.state.count}</p>
        <input
          value={this.state.name}
          onChange={e => this.setState({ name: e.target.value })}
        />
        <button onClick={this.handleClick}>+1</button>
      </div>
    )
  }
}

Avec useState (Composants Fonctionnels)

// MODERNE - Functional Component avec useState
import { useState } from 'react'

function CompteurModerne() {
  const [count, setCount] = useState(0)
  const [name, setName] = useState('')

  return (
    <div>
      <p>Count: {count}</p>
      <input
        value={name}
        onChange={e => setName(e.target.value)}
      />
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  )
}

Pourquoi c'est mieux ?

  • Moins de code : 50% de lignes en moins
  • Plus lisible : pas de this.state partout
  • 🚀 Plus simple : pas de constructor ni de bind
  • 💪 Plus puissant : hooks customs possibles

useState - Les Bases

Syntaxe et Utilisation

import { useState } from 'react'

function ExemplesUseState() {
  // Syntaxe de base : [valeur, fonction_pour_modifier]
  const [count, setCount] = useState(0)          // Nombre
  const [name, setName] = useState('')           // String
  const [isVisible, setIsVisible] = useState(true) // Boolean
  const [items, setItems] = useState([])         // Array
  const [user, setUser] = useState({})           // Object

  return (
    <div>
      {/* Afficher la valeur */}
      <p>Count: {count}</p>
      
      {/* Modifier la valeur */}
      <button onClick={() => setCount(count + 1)}>+1</button>
      <button onClick={() => setCount(0)}>Reset</button>

      {/* Input contrôlé */}
      <input
        value={name}
        onChange={e => setName(e.target.value)}
        placeholder="Votre nom..."
      />

      {/* Toggle boolean */}
      <button onClick={() => setIsVisible(!isVisible)}>
        {isVisible ? 'Masquer' : 'Afficher'}
      </button>
      {isVisible && <p>Je suis visible !</p>}
    </div>
  )
}

Ressources Pour Aller Plus Loin