Boîte à outils Redux : création de fonctions Thunk
Qu'est-ce qu'un Thunk ?
En programmation, le mot thunk fait référence à la partie du code qui effectue un travail différé, comme les fonctions asynchrones en JavaScript.
En soi, un magasin Redux ne gère pas la logique asynchrone. Il sait seulement comment :
- Envoyer des actions de manière synchrone.
- Mettre à jour l'état via les réducteurs.
- Informez l'interface utilisateur des changements d'état.
Mais attendez, si c'est le cas, comment pouvons-nous appeler des API et mettre à jour l'état en fonction de leurs réponses, ce qui prend généralement du temps ? Comment pouvons-nous gérer cela ?
C'est là qu'interviennent les fonctions thunk.
Qu'est-ce qu'une fonction Thunk ?
Une fonction thunk est une fonction créée pour gérer la logique asynchrone, comme appeler une API. Il faut deux arguments dispatch et getState pour distribuer des actions et avoir accès à l'état actuel si nécessaire.
const getAllUsers = () => { return async (dispatch, getState) => { dispatch(fetingAllUsers()); try { const users = await getUsers(); dispatch(userUpdated(users)); } catch (err) { dispatch(logError(err)) } } }
La fonction renvoyée est la fonction thunk et getAllUsers est appelé le créateur de l'action thunk dans cet exemple, et elle serait envoyée comme ceci :
dispatch(getAllUsers())
Un créateur d'action thunk peut être envoyé avec des arguments à utiliser dans la fonction thunk, si nécessaire.
Créer des Thunks avec createAsyncThunk
Redux Toolkit fournit l'API createAsyncThunk pour générer facilement des thunks :
import { createAsyncThunk } from '@reduxjs/toolkit'; export const fetchUserById = createAsyncThunk( 'user/fetchUserById', async (userId) => { const user = await someHttpRequest(userId); return user; } );
fetchUserById est la fonction thunk créée ici. createAsyncThunk prend deux arguments :
- Le premier argument est un préfixe de chaîne utilisé pour les types d'action générés (par exemple user/fetchUserById/ending, user/fetchUserById/fulfilled ou user/fetchUserById/rejected).
- Le deuxième argument est une fonction « créateur de charge utile ». Il devrait renvoyer une promesse avec les données requises ou une erreur.
Pourquoi utiliser createAsyncThunk ?
En plus de vous permettre de créer des fonctions thunk pour les appels d'API, createAsyncThunk distribue automatiquement des actions pour suivre l'état des requêtes d'API :
- en attente : La demande est en cours.
- remplie : La demande a réussi.
- rejeté : la demande a échoué.
C'est vraiment utile. Par exemple, nous pouvons afficher un chargeur dans l'interface utilisateur lorsque l'état est en attente et informer l'utilisateur que quelque chose se passe.
Utiliser Thunks dans la tranche
Maintenant que nous avons créé le thunk fetchUserById, nous pouvons utiliser le champ extraReducers dans notre userSlice pour gérer les changements de statut d'état :
import { createSlice } from '@reduxjs/toolkit'; const initialState = { user: null, status: 'idle', // 'idle' | 'pending' | 'succeeded' | 'failed' error: null, }; export const userSlice = createSlice({ name: 'user', initialState, reducers: { usernameUpdated: (state, action) => { state.user.username = action.payload; }, emailUpdated: (state, action) => { state.user.email = action.payload; }, userDataCleared: (state) => { state.user = null; state.status = 'idle'; }, }, extraReducers: (builder) => { builder .addCase(fetchUserById.pending, (state) => { state.status = 'pending'; }) .addCase(fetchUserById.fulfilled, (state, action) => { state.status = 'succeeded'; state.user = action.payload; }) .addCase(fetchUserById.rejected, (state, action) => { state.status = 'failed'; state.error = action.error.message || 'Something went wrong.'; }); }, }); export const { usernameUpdated, emailUpdated, userDataCleared } = userSlice.actions; // Selector for the status to use in the application's components export const selectStatus = (state) => state.user.status;
conditions createAsyncThunk
Et si nous voulons vérifier certaines conditions avant d'appeler l'API ? Par exemple, si le statut est déjà en attente, nous ne voulons pas l’appeler deux fois. Dans ce cas, nous pouvons utiliser le troisième argument accepté par createAsyncThunk pour écrire des conditions.
const getAllUsers = () => { return async (dispatch, getState) => { dispatch(fetingAllUsers()); try { const users = await getUsers(); dispatch(userUpdated(users)); } catch (err) { dispatch(logError(err)) } } }
Pour apprendre à utiliser Typescript avec les fonctions thunk, veuillez lire Type Checking Redux Thunks.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Des questions et des solutions fréquemment posées pour l'impression de billets thermiques frontaux pour le développement frontal, l'impression de billets est une exigence commune. Cependant, de nombreux développeurs mettent en œuvre ...

JavaScript est la pierre angulaire du développement Web moderne, et ses principales fonctions incluent la programmation axée sur les événements, la génération de contenu dynamique et la programmation asynchrone. 1) La programmation axée sur les événements permet aux pages Web de changer dynamiquement en fonction des opérations utilisateur. 2) La génération de contenu dynamique permet d'ajuster le contenu de la page en fonction des conditions. 3) La programmation asynchrone garantit que l'interface utilisateur n'est pas bloquée. JavaScript est largement utilisé dans l'interaction Web, les applications à une page et le développement côté serveur, améliorant considérablement la flexibilité de l'expérience utilisateur et du développement multiplateforme.

Il n'y a pas de salaire absolu pour les développeurs Python et JavaScript, selon les compétences et les besoins de l'industrie. 1. Python peut être davantage payé en science des données et en apprentissage automatique. 2. JavaScript a une grande demande dans le développement frontal et complet, et son salaire est également considérable. 3. Les facteurs d'influence comprennent l'expérience, la localisation géographique, la taille de l'entreprise et les compétences spécifiques.

Apprendre JavaScript n'est pas difficile, mais c'est difficile. 1) Comprendre les concepts de base tels que les variables, les types de données, les fonctions, etc. 2) Master la programmation asynchrone et les implémenter via des boucles d'événements. 3) Utilisez les opérations DOM et promettez de gérer les demandes asynchrones. 4) Évitez les erreurs courantes et utilisez des techniques de débogage. 5) Optimiser les performances et suivre les meilleures pratiques.

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en JavaScript? Lors du traitement des données, nous rencontrons souvent la nécessité d'avoir le même ID ...

La discussion sur la réalisation des effets de défilement de parallaxe et d'animation des éléments dans cet article explorera comment réaliser le site officiel de Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ...

Les dernières tendances de JavaScript incluent la montée en puissance de TypeScript, la popularité des frameworks et bibliothèques modernes et l'application de WebAssembly. Les prospects futurs couvrent des systèmes de type plus puissants, le développement du JavaScript côté serveur, l'expansion de l'intelligence artificielle et de l'apprentissage automatique, et le potentiel de l'informatique IoT et Edge.

Discussion approfondie des causes profondes de la différence de sortie Console.log. Cet article analysera les différences dans les résultats de sortie de la fonction Console.log dans un morceau de code et expliquera les raisons derrière. � ...
