Maison > interface Web > js tutoriel > Simplifier la gestion des états dans React : une introduction à F-Box React

Simplifier la gestion des états dans React : une introduction à F-Box React

Patricia Arquette
Libérer: 2025-01-07 16:33:42
original
214 Les gens l'ont consulté

Simplifying State Management in React: An Introduction to F-Box React

"Oh non… mon état est encore une fois en désordre."

Lorsque vous gérez l'état avec React, avez-vous déjà rencontré des problèmes comme ceux-ci ?

  • Bien que useState et useReducer soient pratiques, transmettre l'état devient fastidieux à mesure que le nombre de composants augmente.
  • Pour partager l'état entre plusieurs composants, vous avez souvent recours au perçage d'accessoires ou à l'introduction de useContext.
  • Les bibliothèques comme Redux sont puissantes mais nécessitent une courbe d'apprentissage abrupte.

"N'y a-t-il pas un moyen plus simple de gérer l'état ?"

C'est pourquoi j'ai créé F-Box React.
Avec F-Box React, vous pouvez vous libérer du modèle de gestion d'état et garder votre code simple !

Table des matières

  1. Présentation
  2. Exemple de base : application de compteur
  3. RBox : utilisable en dehors de React
  4. Partage de l'état entre plusieurs composants
  5. Utiliser useRBox en remplacement de useReducer
  6. Détails et contexte de F-Box React
  7. Conclusion

Introduction

Commençons par examiner des exemples de code concrets pour comprendre comment utiliser F-Box React. Dans cette section, nous comparerons useState avec useRBox en utilisant une simple application de compteur comme exemple.

Exemple de base : application de compteur

La manière habituelle de réagir (useState)

import { useState } from "react"

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

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  )
}

export default Counter
Copier après la connexion
Copier après la connexion

Cette approche classique utilise useState pour gérer le décompte.

Utiliser F-Box React

import { useRBox, set } from "f-box-react"

function Counter() {
  const [count, countBox] = useRBox(0) // Create an RBox with initial value 0
  const setCount = set(countBox) // Get a convenient updater function for the RBox

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  )
}

export default Counter
Copier après la connexion
Copier après la connexion

Ici, nous implémentons le compteur en utilisant useRBox. Puisque useRBox renvoie une paire [value, RBox], elle peut être utilisée de manière très similaire à useState.

RBox : utilisable en dehors de React

import { RBox } from "f-box-core"

const numberBox = RBox.pack(0)

// Subscribe to changes and log updates
numberBox.subscribe((newValue) => {
  console.log(`Updated numberBox: ${newValue}`)
})

// Change the value, which notifies subscribers reactively
numberBox.setValue((prev) => prev + 1) // Updated numberBox: 1
numberBox.setValue((prev) => prev + 10) // Updated numberBox: 11
Copier après la connexion
Copier après la connexion

Comme indiqué ci-dessus, RBox ne dépend pas de React, elle peut donc être utilisée pour la gestion réactive des données dans n'importe quel code TypeScript.

Partage de l'état entre plusieurs composants

La manière habituelle de réagir (avec useContext)

import React, { createContext, useContext, useState } from "react"

const CounterContext = createContext()

function CounterProvider({ children }) {
  const [count, setCount] = useState(0)
  return (
    <CounterContext.Provider value={{ count, setCount }}>
      {children}
    </CounterContext.Provider>
  )
}

function CounterDisplay() {
  const { count } = useContext(CounterContext)
  return <p>Count: {count}</p>
}

function CounterButton() {
  const { setCount } = useContext(CounterContext)
  return <button onClick={() => setCount((prev) => prev + 1)}>+1</button>
}

function App() {
  return (
    <CounterProvider>
      <CounterDisplay />
      <CounterButton />
    </CounterProvider>
  )
}

export default App
Copier après la connexion

Cette méthode utilise useContext pour partager l'état, mais elle a tendance à rendre le code verbeux.

Utiliser F-Box React

import { RBox } from "f-box-core"
import { useRBox } from "f-box-react"

// Define a global RBox
const counterBox = RBox.pack(0)

function CounterDisplay() {
  const [count] = useRBox(counterBox)
  return <p>Count: {count}</p>
}

function CounterButton() {
  return (
    <button onClick={() => counterBox.setValue((prev) => prev + 1)}>+1</button>
  )
}

function App() {
  return (
    <div>
      <CounterDisplay />
      <CounterButton />
    </div>
  )
}

export default App
Copier après la connexion

Ici, nous définissons une RBox globale et utilisons useRBox dans chaque composant pour partager l'état. Cela évite d'avoir recours à useContext ou à des fournisseurs, tout en gardant le code simple.

Utiliser useRBox en remplacement de useReducer

La manière habituelle de réagir (avec useReducer)

import { useReducer } from "react"

type State = {
  name: string
  age: number
}

type Action =
  | { type: "incremented_age" }
  | { type: "changed_name"; nextName: string }

function reducer(state: State, action: Action): State {
  switch (action.type) {
    case "incremented_age": {
      return {
        name: state.name,
        age: state.age + 1,
      }
    }
    case "changed_name": {
      return {
        name: action.nextName,
        age: state.age,
      }
    }
  }
}

const initialState = { name: "Taylor", age: 42 }

export default function Form() {
  const [state, dispatch] = useReducer(reducer, initialState)

  function handleButtonClick() {
    dispatch({ type: "incremented_age" })
  }

  function handleInputChange(e: React.ChangeEvent<HTMLInputElement>) {
    dispatch({
      type: "changed_name",
      nextName: e.target.value,
    })
  }

  return (
    <>
      <input value={state.name} onChange={handleInputChange} />
      <button onClick={handleButtonClick}>Increment age</button>
      <p>
        Hello, {state.name}. You are {state.age}.
      </p>
    </>
  )
}
Copier après la connexion

Utiliser F-Box React

import { useRBox, set } from "f-box-react"

function useUserState(_name: string, _age: number) {
  const [name, nameBox] = useRBox(_name)
  const [age, ageBox] = useRBox(_age)

  return {
    user: { name, age },
    changeName(e: React.ChangeEvent<HTMLInputElement>) {
      set(nameBox)(e.target.value)
    },
    incrementAge() {
      ageBox.setValue((prev) => prev + 1)
    },
  }
}

export default function Form() {
  const { user, changeName, incrementAge } = useUserState("Taylor", 42)

  return (
    <>
      <input value={user.name} onChange={changeName} />
      <button onClick={incrementAge}>Increment age</button>
      <p>
        Hello, {user.name}. You are {user.age}.
      </p>
    </>
  )
}
Copier après la connexion

En utilisant useRBox, vous pouvez gérer l'état sans définir de réducteurs ni de types d'action, ce qui simplifie le code.

Détails et contexte de F-Box React

Jusqu'à présent, nous avons présenté l'utilisation de base de F-Box React à travers des exemples de code. Ensuite, nous couvrirons les informations détaillées suivantes :

  • Contexte : Pourquoi F-Box React a-t-il été créé ?
  • Concepts de base (Détails sur RBox et useRBox)
  • Instructions d'installation et de configuration

Ces points sont cruciaux pour une compréhension plus approfondie de F-Box React.

Contexte : pourquoi F-Box React a-t-il été créé ?

À l'origine, j'ai développé F-Box (f-box-core) uniquement comme une bibliothèque polyvalente pour la programmation fonctionnelle. F-Box fournit des abstractions telles que Box, Maybe, Everyone et Task pour simplifier les transformations de données, les effets secondaires et les calculs asynchrones.

Au sein de F-Box, un conteneur réactif nommé RBox a été introduit. RBox surveille les changements de sa valeur et permet une gestion réactive de l'état.

Après avoir créé RBox, je me suis dit : "Et si j'intégrais cette box réactive dans React ? Cela pourrait simplifier la gestion des états dans les applications React." Sur la base de cette idée, j'ai développé F-Box React (f-box-react)—une collection de hooks qui facilitent l'utilisation de RBox dans les composants React.

En conséquence, F-Box React s'est avéré étonnamment convivial, fournissant un outil puissant pour gérer l'état dans React de manière simple et flexible.

Concepts de base

Les éléments clés de F-Box React sont :

  • RBox
    Un conteneur qui permet la gestion de l'état réactif. Il peut observer et gérer les changements d'état indépendamment de React.

  • useRBox
    Un hook personnalisé pour utiliser facilement RBox dans les composants React. Il fournit une API intuitive similaire à useState, vous permettant de récupérer et de mettre à jour les valeurs réactives.

Ces éléments signifient que :

  • On dirait useState
    La gestion de l'état est aussi intuitive qu'avec useState.

  • Partager sans effort l'état entre plusieurs composants
    Vous pouvez facilement partager l'état entre plusieurs composants.

  • RBox peut également être utilisé en dehors de React
    Parce qu'il ne dépend pas de React, il est également utilisable dans des environnements non-React.

Cela rend la gestion de l'état extrêmement simple.

Instructions d'installation et de configuration

Pour intégrer F-Box React dans votre projet, exécutez la commande suivante en utilisant npm ou Yarn. Puisque F-Box React dépend de f-box-core, vous devez installer les deux simultanément :

import { useState } from "react"

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

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  )
}

export default Counter
Copier après la connexion
Copier après la connexion

Après l'installation, vous pouvez importer et utiliser des hooks comme useRBox comme indiqué dans les exemples précédents :

import { useRBox, set } from "f-box-react"

function Counter() {
  const [count, countBox] = useRBox(0) // Create an RBox with initial value 0
  const setCount = set(countBox) // Get a convenient updater function for the RBox

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  )
}

export default Counter
Copier après la connexion
Copier après la connexion

Assurez-vous également que f-box-core est installé, car il fournit les conteneurs essentiels comme RBox :

import { RBox } from "f-box-core"

const numberBox = RBox.pack(0)

// Subscribe to changes and log updates
numberBox.subscribe((newValue) => {
  console.log(`Updated numberBox: ${newValue}`)
})

// Change the value, which notifies subscribers reactively
numberBox.setValue((prev) => prev + 1) // Updated numberBox: 1
numberBox.setValue((prev) => prev + 10) // Updated numberBox: 11
Copier après la connexion
Copier après la connexion

Avec cette configuration, vous pouvez désormais gérer l'état à l'aide de F-Box React.

Conclusion

En utilisant F-Box React, la gestion des états dans React devient considérablement plus simple :

  1. Intuitif comme useState
    Transmettez simplement une valeur initiale à useRBox et commencez à l'utiliser immédiatement.

  2. RBox fonctionne en dehors de React
    Parce qu'il ne dépend pas de React, vous pouvez l'utiliser côté serveur ou dans d'autres environnements.

  3. Partage d'état facile
    Définissez une RBox globale et utilisez useRBox partout où vous en avez besoin pour partager l'état entre plusieurs composants. Cela élimine le besoin de configurations complexes avec useContext ou Redux.

Si vous cherchez un moyen plus simple de gérer l'état, essayez F-Box React !

  • npm
  • GitHub

Nous avons présenté ici l'utilisation de base et la commodité de F-Box React, mais F-Box offre bien plus de fonctionnalités. Il peut gérer des opérations asynchrones, la gestion des erreurs et des scénarios plus complexes.

Pour plus de détails, consultez la documentation F-Box.
J'espère que F-Box React rendra votre développement React et TypeScript plus agréable et plus simple !

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal