⊗jsrxPmWFRAA 17 of 57 menu

Réducteur et action dans Redux

Lors de la leçon précédente, nous avons terminé le formulaire pour ajouter un produit et l'avons affiché sur la page d'accueil. Mais pour l'instant, les données ajoutées ne sont pas sauvegardées, en d'autres termes, le nouveau produit n'est pas ajouté à ceux existants dans le store. Corrigeons cela.

Pour commencer, dans notre application de produits, nous allons ouvrir le fichier productsSlice.jsx et écrire dans la propriété reducer pour createSlice la fonction productAdded, qui sera chargée d'ajouter le produit dans le store sur la base de l'état actuel et de l'action qui lui sont transmis. Il est important de noter que ce n'est pas tout le state qui nous est transmis, mais seulement la partie qui est responsable des produits (la tranche products ne connaît qu'elle). L'objet du nouveau produit se trouvera dans la propriété payload de l'objet action, qui sera généré par le gestionnaire lors du clic sur le bouton de sauvegarde dans le formulaire. En conséquence, le réducteur productAdded ressemblera dans le code de createSlice à ceci :

const productsSlice = createSlice({ name: 'products', initialState, reducers: { productAdded(state, action) { state.push(action.payload) }, }, })

Et l'action ? Tout au début du tutoriel, nous avons mentionné qu'une action est un événement quelconque, représenté sous la forme d'un objet, décrivant ce qui s'est passé dans l'application. Nous avons également parlé du fait que l'on peut utiliser une fonction action creator, qui va nous créer un tel objet, par exemple comme ceci :

const addProduct = newProduct => { return { type: 'products/productAdded', payload: newProduct } }

La bonne nouvelle est que nous n'avons rien besoin de faire, car la fonction createSlice le fera pour nous. Dès que nous avons écrit le reducer, elle créera automatiquement pour nous l'action creator portant le même nom. Il ne nous reste plus qu'à exporter l'action creator obtenu pour une utilisation ultérieure dans les composants. Faisons cela à la fin du fichier avant l'export du réducteur, comme ceci :

export const { productAdded } = productsSlice.actions export default productsSlice.reducer

Ouvrez votre application avec les étudiants, puis le fichier studentsSlice.jsx, complétez la valeur du champ reducer pour createSlice, comme montré dans la leçon.

Ajoutez à la fin du fichier studentsSlice.jsx l'export de la fonction action creator obtenue.

hiplitsvhy