Multiple react re-renderings when updating tree data
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 30/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- react
- Ambito
- frontend, performance
Direzione di ricerca
Inizia con la riproduzione CodeSandbox collegata e il relativo esempio in una finestra separata, quindi verifica il numero di render mentre espandi l’albero e attivi o disattivi un elemento. Il lavoro è completato quando l’aggiornamento riprodotto provoca un render di rc-tree mantenendo il singolo render di CustomTreeNode indicato come corretto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Disclaimer: I use the term re-renderings. By this term here I mean react re-renderings and not browser re-renderings.
I have prepared a code example to reproduce the issue: codesandbox
Code example can be tested in separate window: separate window
Steps to reproduce:
- Expand all Elements
- Toggle Switch Button of single Element
- Internally: object
treeDatawill be completely recalculated and passed into rc-tree component - Expected results:
- I expect here, that rc-tree will be re-rendered 1 time (because
treeDatahas changed) - I expect here, that only single
CustomTreeNodewill be re-rendered, whichSwitchcomponent I have toggled on step 2.
- I expect here, that rc-tree will be re-rendered 1 time (because
- Actual results:
- rc-tree component re-rendered 3 times instead of 1 -> NOK
- only one
CustomTreeNodewill be re-rendered -> OK
Example video:
https://github.com/react-component/tree/assets/8103060/78917bcd-1e21-48ce-907a-4cc2082ff8d7
Duration of re-renderings from the video for rc-tree and all of its descendants:
- re-rendering no.1: 11.6 ms
- re-rendering no.2: 6.1 ms
- re-rendering no.3: 13.5 ms
Re-rendering screenshots
Re-rendering no.1:
Re-rendering no.2:
Re-rendering no.3:
My questions are:
- Is this a known behavior?
- Is it possible to fix it? (reduce number of re-renderings from 3 to 1. This should improve performance dramatically (11.6ms vs 31.2 ms - almost 3 times faster)
Thank you for your work and thank you in advance
- Lingua principale
- TypeScript
- Stelle
- 1.3k
- Fork
- 491
- Merge medio
- 48m
- PR unite (30g)
- 1
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di react-component/tree
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 55/100
react-component/tree#1068 · 1 commento ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
react-component/tree#983 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
react-component/tree#937 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
react-component/tree#935 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
react-component/tree#929 ·
Tutte le issue di react-component/tree
Issue simili
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
tomjn/coilbox-hub#454 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno
-
api: spanner
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
googleapis/google-cloud-node#9513 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 92/100
I maintainer di solito rispondono entro 1 giorno
-
SegmentedControl calls Math.random() during render, breaking Next.js cacheComponents prerenderingAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
mantinedev/mantine#9244 ·
I maintainer di solito rispondono entro 8 giorni