Mik a bemutató és a konténer alkatrészek a reakcióban? – CloudSavvy IT

Avatar admin | 2021.01.15. 11 Views 0 Likes 0 Ratings

11 Views 0 Ratings Rate it

React logó sötét háttér előtt

A React olyan komponens-alapú architektúrával rendelkezik, amely arra ösztönzi Önt, hogy ossza fel a kódbázist a funkcionalitás újrafelhasználható egységeire. Nem minden komponens jön létre egyenlően. Vizsgáljuk meg a két általános típus, a Presentational és a Container (más néven „Stateful”) komponensek közötti különbségeket.

Van-e állam?

Először is hangsúlyozni kell, hogy ezek a kifejezések nem utalnak semmilyen konkrét React szolgáltatásra. Leírják a React komponensek írásmódját, amely segít fenntartani a modularitást és elkülöníteni az aggályokat. A két komponenstípus létezése a kódbázisában hozott döntésekből adódik.

Csak egy megkülönböztető tényező van: a konténerkomponenseknek van állapotuk, a prezentációs komponenseknek pedig nincs. A gyakorlatban ez azt jelenti, hogy egy konténerkomponens mindig felhívja a React-et setState() módszer. A prezentációs komponens soha nem fogja használni az állapotot.

Példákat nézve

Itt egy egyszerű bemutató komponens:

import React from "react";
 
class Presentational extends React.Component {
 
    render() {
        return <h1>{this.props.title}</h1>;
    }
 
}
 
export default Presentational;

Az alkatrész rendkívül egyszerű. Ez egyetlen h1 címke, amely a komponensen keresztül továbbított szöveget jeleníti meg title támaszt. Most nézzünk meg egy állapotfigyelő tároló összetevőt:

import React from "react";
 
class Container extends React.Component {
 
    constructor(props) {
        super(props);
 
        this.state = {
 
            time: (new Date()).toString()
 
        };
 
    }
 
 
    componentDidMount() {
        setInterval(() => {
            this.setState({time: (new Date()).toString()});
        }, 1000);
    }
 
 
    render() {
        return <h1>{this.state.time}</h1>;
    }
 
}
 
export default Container;

A konténer alkatrészei render módszer szinte megegyezik a prezentációs komponensével. A különbség az, hogy a tartálykomponens a szövegét önmagából forrja, ahelyett, hogy egy külső értékre támaszkodna, mint a kellék.

Minden másodpercben a tároló összetevő hív setState() hogy frissítse a time kulcs az állapotában. Ez azt eredményezi, hogy a React újra rendereli az összetevőt és megjeleníti az új időt. Konténerünk rendelkezik saját állapotával.

Az egyes típusok jellemzői

Számos egyedi jellemző hajlamos felmerülni mind a prezentációs, mind a konténerkomponenseken belül. Először a prezentációs összetevőket vizsgálva, valószínűleg a kódjaik nagy része a render módszer. Nagyon kevés logikát tartalmaznak, mivel viselkedésüket a külvilág határozza meg.

A prezentációs komponensek boldogan nincsenek tisztában azzal, honnan származnak adataik. Nem tudják, mikor (vagy hogy) változik-e. Néhány példa talán nem is fogadja el a kellékeket. Itt van egy díszítő elem, amely egyszerűen megjelenít egy adott képfájlt:

export () => <img src="https://www.cloudsavvyit.com/logo.png" />

A konténerek alkatrészei sokkal ellentétesek a prezentációs társaikkal. Általában azt találja, hogy webhelye logikájának nagy része egy tároló összetevőbe kerül. A render A módszer meglehetõsen rövid lehet, mivel még sok sort költ az adatok külsõ forrásokból történõ lekérésére, az igényeinek megfelelõ átalakításra, majd állapotba tárolásra.

Egy konténer alkatrész render A módszer egy sorból állhat, amely egy prezentációs komponenst jelenít meg. Most már alaposan elkülönítette az aggodalmakat, mindkét komponensnek külön szerepe van, amely teljes mértékben tiszteletben tartja a másikét. A konténer összetevő az adatokat forrja; a prezentációs komponens a képernyőre teszi.

Így néz ki ez a gyakorlatban:

import React from "react";
 
const View = ({title, body}) => (
    <div>
        <h1>{title}</h1>
        <p>{body}</p>
    </div>
);
 
class BlogPostComponent extends React.Component {
 
    constructor(props) {
        super(props);
 
        this.state = {
 
            blog: null
 
        };
 
    }
 
 
    componentDidMount() {
        fetch("/blog-post.json")
            .then(response => response.json());
            .then(blog => this.setState({blog}));
    }
 
 
    render() {
        return (
            <View
                title={this.state.blog.headline}
                body={this.state.blog.content} />
        );
    }
 
}}

BlogPostComponent a konténer alkatrészünk. Bejegyzést tölt be a hálózaton keresztül. Az adatokat ezután megkapja a View komponens a megjelenítéshez. View nem érdekli, honnan veszi az adatait – a jövőben újra felhasználhatnánk egy harmadik fél API-ból, például a Facebookról vagy a Twitterről letöltött bejegyzések megjelenítésére.

A tárolókomponenseket azért hívják, mert hajlamosak az alkalmazás teljes funkcionális területeit befogadni. Működtetik a projektet, és képviselik az alkalmazás háttérrendszereit.

Egy igazi kódbázisban BlogPostComponent még nagyobb felelőssége lenne. Nyomon kell követnie, hogy a bejegyzés betöltődött-e, és kezelnie kell-e a hibákat a hálózat lekérése során. Következésképpen a render A módszer tartalmazhat néhány alapvető logikát a megjelenített adatok megváltoztatásához – akár hibaüzenetet, haladási sávot, akár prezentációnkat View összetevő. A prezentációs összetevőknek soha nincs nagyobb felelősségük, mint az UI egy adott szakaszának a DOM-ba történő áthelyezése.

A bemutató és a konténer alkatrészek elválasztásának előnyei

Ennek a mintának a használata megkönnyíti a kódbázis rendezését, és megakadályozza, hogy az alkatrészek túl nehézkessé váljanak. Bár ez nem egy kemény és gyors szabály, a két típus szorgalmas elkülönítése javítja a karbantarthatóságot, ahogy a projekt összetevőinek száma növekszik.

Próbáljon utánanézni a refrakcionálás lehetőségeinek, mint egy konténer alkatrész render módszer nő. Valószínű, hogy a tartalmának nagy részét elveheti, és új prezentációs komponensre oszthatja. Ez megkönnyíti a prezentációs kód újrafelhasználását a jövőben. Végül önálló és képes bármilyen adatforrástól függetlenül működni.

Az állapotjelző komponensek ritkábban kerülnek újrafelhasználásra. A nem triviális viselkedések természetesen felhalmozódnak bennük, ami a külvilágtól való függőséget eredményez. Ez nem azt jelenti, hogy ők nem lehet újra felhasználható – a kétlépcsős megerősítő gomb belső állapotot tartalmaz (annak eldöntésére, hogy a „Felhasználó jelszavának visszaállítása” vagy a „Biztos vagy benne?” jelenik meg), de a kódbázisban is telepítésre kerül.

Talán mindennél jobban, ha szándékosan különbséget tesz a Jelen és a Konténer összetevők között, akkor tudatában lehet annak, hogy hol található az alkalmazás állapota. Az állapotú komponensek számának minimalizálása hozzájárul a karbantartható kódbázis kialakításához, és segít elkülöníteni az aggályokat.

Ha nem tudja eldönteni, hogy egy komponensnek állapotban kell-e maradnia, akkor folytassa a kódolást és a refaktort később – valószínűleg túl korai a projekt életciklusában, hogy tudjuk, hol fog összegyűlni a komplexitás (és így az állam).


Source link


11 Views 0 Ratings Rate it

  • Minden jog fenntartva 2019-2020. Hogyankészítsek.Hu Impresszum Adatkezelési szabályok