React- Zmena kontextu bez prerenderovania obsahu rubrika: Programování: JavaScript
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.
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.
Pro zobrazení všech 2 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře