React- Zmena kontextu bez prerenderovania obsahu rubrika: Programování: JavaScript

7 xxar3s
položil/-a 27.7. 0:20
 
upravil/-a 27.7. 0:27

Ahojte, s reactovým kontextom zatiaľ nemám veľa skúseností, doteraz som používal Redux, a reactový kontext som používal len minimálne, ale rád by som sa naučil používať Context namiesto Reduxu. Možno to mám zle navrhnuté. Keďže zatiaľ v používaní kontextu nie som na 100% doma. Takže mám jednu záludnú otázku: ako pristupovať k Reactovému kontextu, tak aby sa komponeta k nemu pristupujúca po zmene state toho kontextu (ArticleContext) neprerenderovala? Mám totiž jeden z kontextov, ktorý obsahuje states pre sadu komponent. A potom mám komponentu menu, ktorá by mala tiež pristupovať k tomu kontextu, ale mala by meniť len jeho state. Menu by sa nemalo pri zmene kontextu prerenderovať. Pôvodne som to mal zapísané takto:

<ArticleContext.Consumer>
    {(articleContext: ArticleContextType) => (
        <Menubar
            key={this.context.langCode}
            model={this.menubarModel(articleContext)}
            end={this.rightContents()}
            className="p-mb-2"
        />
    )}
</ArticleContext.Consumer>

Lenže tým, že bol Menubar zanorený do ArticleContext.Consumer sa vždy menu prerenderovalo (pri každej zmene ArticleContextu). Skúsil som teda takúto prasárnu:

<>
    <ArticleContext.Consumer>
        {(articleContext: ArticleContextType) => (
            this.articleContext = articleContext,
            null
        )}
    </ArticleContext.Consumer>
    {this.articleContext &&
        <Menubar
            key={this.context.langCode}
            model={this.menubarModel(this.articleContext)}
            end={this.rightContents()}
            className="p-mb-2"
        />
    }
</>

A ono to funguje, ale príde mi, že asi niečo nerobím, tak ako by sa malo. Lebo ten zápis je už na prvý pohľad humus.

PS ešte pre upresnenie komponenta menu, pristupuje k dvom kontextom (Applikačný kontext mám priamo v this.context) a articleContext predávam ako argument do metódy vytvárajúcej model pre menu.

odkaz
5 vit.herman
odpověděl/-a 28.7. 3:39

Na pohled bych řekl, že i ta "prasárna" by se měla přerenderovávat, takže spíš nechápu, že to funguje. Otázka je, proč by přerenderování v tomto případě mělo nějak zásadně vadit, pokud se změnil nadřízený stav (kontext). Eventuálně by mohlo pomoci použít React.memo na Menubar.

Komentáře

  • xxar3s : Neprerenderováva sa ale už som si to vyriešil. Vymyslel som ešte väčšiu prasárnu :D, ale v kóde je celkom čitateľná 11.8. 19:19

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.