Table des matières
Gestion du statut
Principes de base dans ngrx/store
Actions (comportement)
Réducteurs (réducteurs)
Store (stockage)
Exemple simple
Créer un formulaire
NGRX Store
Maison interface Web js tutoriel Comprenez rapidement le framework NgRx/Store dans Angular en un seul article

Comprenez rapidement le framework NgRx/Store dans Angular en un seul article

Jun 30, 2021 am 11:24 AM
angular 框架

Qu'est-ce que le framework NgRx/Store dans Angular ? A quoi ça sert ? Cet article vous amènera à comprendre le cadre de gestion de l'état des données NgRx/Store, les principes de base de ngrx/store et à apprendre l'utilisation simple du cadre à travers des exemples.

Comprenez rapidement le framework NgRx/Store dans Angular en un seul article

[Recommandation de tutoriel associée : "tutoriel angulaire"]

ngrx/store est basé sur le statut de RxJS Bibliothèque de gestion, inspirée de Redux. En NgRx, l'état est composé d'une carte contenant les fonctions de action et reducer. La fonction Reducer est appelée via le dispatch de action et l'état actuel ou initial, et enfin un état immuable est renvoyé par reducer.

Comprenez rapidement le framework NgRx/Store dans Angular en un seul article

Gestion du statut

La gestion du statut des projets front-end vastes et complexes Angular/AngularJS a toujours été un casse-tête. Dans AngularJS (version 1.x), la gestion de l'état est généralement gérée par un mélange de services, d'événements, $rootScope. Dans Angular (version 2+), la communication entre composants rend la gestion des états plus claire, mais elle reste encore un peu compliquée et de nombreuses méthodes sont utilisées en fonction du sens du flux de données.

Principes de base dans ngrx/store

La couche de vue initie une action via dispatch, et Reducerreçoit action, selon action.type Type pour déterminer l'exécution, modifier le statut, renvoyer un nouveau statut à store et mettre à jour store par state.

Comprenez rapidement le framework NgRx/Store dans Angular en un seul article

  • State (état) est l'état (state) la mémoire
  • Action (comportement) décrit le changement d'état
  • Reducer (fonction de réduction/réduction) Calculez le nouvel état en fonction de l'état précédent et du comportement actuel. La méthode à l'intérieur est une pure fonction
  • l'état utilise un objet observable de State. , l'observateur de Action - Store pour accéder aux

Actions (comportement)

Actions est porteur d'informations, il envoie des données vers reducer, puis reducermettre à jourstore. Actions est le seul moyen pour store d'accepter des données.

Dans ngrx/store, l'interface de Action est la suivante :

// actions包括行为类型和对应的数据载体
export interface Action {
  type: string;
  payload?: any;
}
Copier après la connexion

type décrit le type de changement d'état attendu. Par exemple, ajoutez une tâche ADD_TODO, ajoutez DECREMENT, etc. payload sont les données envoyées à store pour être mises à jour. storeLe code de dispatching action est similaire au suivant :

// 派发action,从而更新store
store.dispatch({
  type: 'ADD_TODO',
  payload: 'Buy milk'
});
Copier après la connexion

Réducteurs (réducteurs)

Reducers précise les changements d'état spécifiques correspondant au comportement. Il s'agit d'une fonction pure qui change l'état en recevant l'état précédent et en répartissant le comportement pour renvoyer un nouvel objet comme état suivant. Les nouveaux objets sont généralement implémentés en utilisant Object.assign et une syntaxe étendue.

// reducer定义了action被派发时state的具体改变方式
export const todoReducer = (state = [], action) => {
  switch(action.type) {
    case 'ADD_TODO':
      return [...state, action.payload];
    default:
      return state;
  }
}
Copier après la connexion

Portez une attention particulière à la pureté des fonctions lors du développement. Parce que les fonctions pures :

  • ne changeront pas l'état en dehors de leur portée
  • La sortie ne dépend que de l'entrée
  • La même entrée obtiendra toujours la même sortie

Store (stockage)

store stocke tout l'état immuable dans l'application. Le ngrx/store dans store est l'objet observable de l'état RxJS et l'observateur du comportement.

peut être utilisé pour distribuer des actions à l'aide de Store. Vous pouvez également utiliser la méthode select() du Store pour obtenir des objets observables, puis vous abonner pour observer et réagir après les changements de statut.

Ce que nous décrivons ci-dessus est le processus de base. Dans le processus de développement réel, des opérations asynchrones telles que les requêtes API et le stockage du navigateur seront impliquées, ce qui nécessite effects et services est déclenché par effects après avoir exécuté une série de logiques. doivent être ajoutés à Le action de la file d'attente est ensuite traité par action. reducers

Comprenez rapidement le framework NgRx/Store dans Angular en un seul article

Utilisez le framework ngrx/store pour développer des applications, en maintenant toujours un seul état et en réduisant les appels d'API.

Exemple simple

Une brève introduction au module de connexion d'un système de gestion.

Créer un formulaire

1. Ajouter des composants :

, principalement la mise en page, le code est la logique des composants LoginComponent

2. Définir les utilisateurs : < 🎜. >

export class User {
    id: number;
    username: string;
    password: string;
    email: string;
    avatar: string;

    clear(): void {
        this.id = undefined;
        this.username = "";
        this.password = "";
        this.email = "";
        this.avatar = "./assets/default.jpg";
    }
}
Copier après la connexion

3、添加表单:在组件LoginComponent增加Form表单

NGRX Store

按照上述的4个原则定义相应的Actions

Comprenez rapidement le framework NgRx/Store dans Angular en un seul article

  • reducers定义状态

    在文件auth.reducers.ts中创建状态,并初始化

    export interface AuthState {
        isAuthenticated: boolean;
        user: User | null;
        errorMessage: string | null;
    }
    
    export const initialAuthState: AuthState = {
        isAuthenticated: false,
        user: null,
        errorMessage: null
    };
    Copier après la connexion
  • actions定义行为

    export enum AuthActionTypes {
        Login = "[Auth] Login",
        LoginSuccess = "[Auth] Login Success",
        LoginFailure = "[Auth] Login Failure"
    }
    
    export class Login implements Action {
        readonly type = AuthActionTypes.Login;
        constructor(public payload: any) {}
    }
    Copier après la connexion
  • service实现数据交互(服务器)

    @Injectable()
    export class AuthService {
        private BASE_URL = "api/user";
    
        constructor(private http: HttpClient) {}
    
        getToken(): string {
            return localStorage.getItem("token");
        }
    
        login(email: string, pwd: string): Observable<any> {
            const url = `${this.BASE_URL}/login`;
            return this.http.post<User>(url, { email, pwd });
        }
    }
    Copier après la connexion
  • effects侦听从Store调度的动作,执行某些逻辑,然后分派新动作

    • 一般情况下只在这里调用API

    • 通过返回一个action给reducer进行操作来改变store的状态

    • effects总是返回一个或多个action(除非@Effect with {dispatch: false})

Comprenez rapidement le framework NgRx/Store dans Angular en un seul article

  • @Effect()
    Login: Observable<any> = this.actions.pipe(
        ofType(AuthActionTypes.Login),   //执行Login响应
        map((action: Login) => action.payload),
        switchMap(payload => {
            return this.authService.login(payload.email, payload.password).pipe(
                map(user => {
                    return new LoginSuccess({ uid: user.id, email: payload.email });
                }),
                catchError(error => {
                    return of(new LoginFailure(error));
                })
            );
        })
    );
    
    //失败的效果
    @Effect({ dispatch: false })
    LoginFailure: Observable<any> = this.actions.pipe(ofType(AuthActionTypes.LoginFailure));
    
    //成功的效果
    @Effect({ dispatch: false })
    LoginSuccess: Observable<any> = this.actions.pipe(
        ofType(AuthActionTypes.LoginSuccess),
        tap(user => {
            localStorage.setItem("uid", user.payload.id);
            this.router.navigateByUrl("/sample");
        })
    );
    Copier après la connexion

    更多编程相关知识,请访问:编程视频!!

    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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment évaluer la rentabilité du support commercial des frameworks Java Comment évaluer la rentabilité du support commercial des frameworks Java Jun 05, 2024 pm 05:25 PM

L'évaluation du rapport coût/performance du support commercial pour un framework Java implique les étapes suivantes : Déterminer le niveau d'assurance requis et les garanties de l'accord de niveau de service (SLA). L’expérience et l’expertise de l’équipe d’appui à la recherche. Envisagez des services supplémentaires tels que les mises à niveau, le dépannage et l'optimisation des performances. Évaluez les coûts de support commercial par rapport à l’atténuation des risques et à une efficacité accrue.

Comment les options légères des frameworks PHP affectent-elles les performances des applications ? Comment les options légères des frameworks PHP affectent-elles les performances des applications ? Jun 06, 2024 am 10:53 AM

Le framework PHP léger améliore les performances des applications grâce à une petite taille et une faible consommation de ressources. Ses fonctionnalités incluent : une petite taille, un démarrage rapide, une faible utilisation de la mémoire, une vitesse de réponse et un débit améliorés et une consommation de ressources réduite. Cas pratique : SlimFramework crée une API REST, seulement 500 Ko, une réactivité élevée et un débit élevé.

Comment la courbe d'apprentissage des frameworks PHP se compare-t-elle à celle d'autres frameworks de langage ? Comment la courbe d'apprentissage des frameworks PHP se compare-t-elle à celle d'autres frameworks de langage ? Jun 06, 2024 pm 12:41 PM

La courbe d'apprentissage d'un framework PHP dépend de la maîtrise du langage, de la complexité du framework, de la qualité de la documentation et du support de la communauté. La courbe d'apprentissage des frameworks PHP est plus élevée par rapport aux frameworks Python et inférieure par rapport aux frameworks Ruby. Par rapport aux frameworks Java, les frameworks PHP ont une courbe d'apprentissage modérée mais un temps de démarrage plus court.

Comparaison des performances des frameworks Java Comparaison des performances des frameworks Java Jun 04, 2024 pm 03:56 PM

Selon les benchmarks, pour les petites applications hautes performances, Quarkus (démarrage rapide, mémoire faible) ou Micronaut (TechEmpower excellent) sont des choix idéaux. SpringBoot convient aux grandes applications full-stack, mais a des temps de démarrage et une utilisation de la mémoire légèrement plus lents.

Bonnes pratiques en matière de documentation du framework Golang Bonnes pratiques en matière de documentation du framework Golang Jun 04, 2024 pm 05:00 PM

La rédaction d'une documentation claire et complète est cruciale pour le framework Golang. Les meilleures pratiques incluent le respect d'un style de documentation établi, tel que le Go Coding Style Guide de Google. Utilisez une structure organisationnelle claire, comprenant des titres, des sous-titres et des listes, et fournissez la navigation. Fournit des informations complètes et précises, notamment des guides de démarrage, des références API et des concepts. Utilisez des exemples de code pour illustrer les concepts et l'utilisation. Maintenez la documentation à jour, suivez les modifications et documentez les nouvelles fonctionnalités. Fournir une assistance et des ressources communautaires telles que des problèmes et des forums GitHub. Créez des exemples pratiques, tels que la documentation API.

Comment choisir le meilleur framework Golang pour différents scénarios d'application Comment choisir le meilleur framework Golang pour différents scénarios d'application Jun 05, 2024 pm 04:05 PM

Choisissez le meilleur framework Go en fonction des scénarios d'application : tenez compte du type d'application, des fonctionnalités du langage, des exigences de performances et de l'écosystème. Frameworks Go courants : Gin (application Web), Echo (service Web), Fibre (haut débit), gorm (ORM), fasthttp (vitesse). Cas pratique : construction de l'API REST (Fiber) et interaction avec la base de données (gorm). Choisissez un framework : choisissez fasthttp pour les performances clés, Gin/Echo pour les applications Web flexibles et gorm pour l'interaction avec la base de données.

Feuille de route d'apprentissage du framework Java : meilleures pratiques dans différents domaines Feuille de route d'apprentissage du framework Java : meilleures pratiques dans différents domaines Jun 05, 2024 pm 08:53 PM

Feuille de route d'apprentissage du framework Java pour différents domaines : Développement Web : SpringBoot et PlayFramework. Couche de persistance : Hibernate et JPA. Programmation réactive côté serveur : ReactorCore et SpringWebFlux. Informatique temps réel : ApacheStorm et ApacheSpark. Cloud computing : AWS SDK pour Java et Google Cloud Java.

Quels sont les malentendus courants dans le processus d'apprentissage du framework Golang ? Quels sont les malentendus courants dans le processus d'apprentissage du framework Golang ? Jun 05, 2024 pm 09:59 PM

Il existe cinq malentendus dans l'apprentissage du framework Go : une dépendance excessive à l'égard du framework et une flexibilité limitée. Si vous ne respectez pas les conventions du framework, le code sera difficile à maintenir. L'utilisation de bibliothèques obsolètes peut entraîner des problèmes de sécurité et de compatibilité. L'utilisation excessive de packages obscurcit la structure du code. Ignorer la gestion des erreurs entraîne un comportement inattendu et des plantages.

See all articles