Commit 2bbd282
Fix: Don't call cWU if already unmounted
When a tree goes offscreen, we unmount all the effects just like we
would in a normal deletion. (Conceptually it _is_ a deletion; we keep
the fiber around so we can reuse its state if the tree mounts again.)
If an offscreen component gets deleted "for real", we shouldn't unmount
it again.
The fix is to track on the stack whether we're inside a hidden tree.
We already had a stack variable for this purpose, called
`offscreenSubtreeWasHidden`, in another part of the commit phase, so I
reused that variable instead of creating a new one. (The name is a bit
confusing: "was" refers to the current tree before this commit. So, the
"previous current".)
Co-authored-by: dan <dan.abramov@me.com>1 parent 4cd752b commit 2bbd282
File tree
4 files changed
+555
-102
lines changed- packages/react-reconciler/src
- __tests__
4 files changed
+555
-102
lines changedLines changed: 85 additions & 50 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1604 | 1604 | | |
1605 | 1605 | | |
1606 | 1606 | | |
1607 | | - | |
| 1607 | + | |
| 1608 | + | |
| 1609 | + | |
1608 | 1610 | | |
1609 | 1611 | | |
1610 | 1612 | | |
| |||
1710 | 1712 | | |
1711 | 1713 | | |
1712 | 1714 | | |
1713 | | - | |
1714 | | - | |
1715 | | - | |
1716 | | - | |
1717 | | - | |
1718 | | - | |
1719 | | - | |
1720 | | - | |
1721 | | - | |
1722 | | - | |
1723 | | - | |
1724 | | - | |
1725 | | - | |
1726 | | - | |
1727 | | - | |
1728 | | - | |
1729 | | - | |
1730 | | - | |
1731 | | - | |
1732 | | - | |
1733 | | - | |
1734 | | - | |
1735 | | - | |
1736 | | - | |
1737 | | - | |
1738 | | - | |
1739 | | - | |
1740 | | - | |
1741 | | - | |
1742 | | - | |
1743 | | - | |
1744 | | - | |
1745 | | - | |
1746 | | - | |
| 1715 | + | |
| 1716 | + | |
| 1717 | + | |
| 1718 | + | |
| 1719 | + | |
| 1720 | + | |
| 1721 | + | |
| 1722 | + | |
| 1723 | + | |
| 1724 | + | |
| 1725 | + | |
| 1726 | + | |
1747 | 1727 | | |
1748 | 1728 | | |
1749 | 1729 | | |
1750 | 1730 | | |
1751 | 1731 | | |
1752 | | - | |
| 1732 | + | |
| 1733 | + | |
| 1734 | + | |
| 1735 | + | |
1753 | 1736 | | |
1754 | | - | |
1755 | | - | |
| 1737 | + | |
| 1738 | + | |
| 1739 | + | |
| 1740 | + | |
| 1741 | + | |
| 1742 | + | |
| 1743 | + | |
| 1744 | + | |
| 1745 | + | |
| 1746 | + | |
| 1747 | + | |
| 1748 | + | |
| 1749 | + | |
| 1750 | + | |
| 1751 | + | |
| 1752 | + | |
| 1753 | + | |
| 1754 | + | |
| 1755 | + | |
| 1756 | + | |
| 1757 | + | |
| 1758 | + | |
| 1759 | + | |
1756 | 1760 | | |
1757 | 1761 | | |
1758 | | - | |
1759 | | - | |
1760 | | - | |
| 1762 | + | |
| 1763 | + | |
| 1764 | + | |
1761 | 1765 | | |
1762 | 1766 | | |
1763 | 1767 | | |
| |||
1769 | 1773 | | |
1770 | 1774 | | |
1771 | 1775 | | |
1772 | | - | |
1773 | | - | |
1774 | | - | |
1775 | | - | |
1776 | | - | |
1777 | | - | |
1778 | | - | |
1779 | | - | |
| 1776 | + | |
| 1777 | + | |
| 1778 | + | |
| 1779 | + | |
| 1780 | + | |
| 1781 | + | |
| 1782 | + | |
| 1783 | + | |
| 1784 | + | |
| 1785 | + | |
1780 | 1786 | | |
1781 | 1787 | | |
1782 | 1788 | | |
| |||
1796 | 1802 | | |
1797 | 1803 | | |
1798 | 1804 | | |
| 1805 | + | |
| 1806 | + | |
| 1807 | + | |
| 1808 | + | |
| 1809 | + | |
| 1810 | + | |
| 1811 | + | |
| 1812 | + | |
| 1813 | + | |
| 1814 | + | |
| 1815 | + | |
| 1816 | + | |
| 1817 | + | |
| 1818 | + | |
| 1819 | + | |
| 1820 | + | |
| 1821 | + | |
| 1822 | + | |
| 1823 | + | |
| 1824 | + | |
| 1825 | + | |
1799 | 1826 | | |
1800 | 1827 | | |
1801 | 1828 | | |
| |||
2203 | 2230 | | |
2204 | 2231 | | |
2205 | 2232 | | |
| 2233 | + | |
| 2234 | + | |
| 2235 | + | |
| 2236 | + | |
| 2237 | + | |
| 2238 | + | |
| 2239 | + | |
2206 | 2240 | | |
| 2241 | + | |
| 2242 | + | |
2207 | 2243 | | |
2208 | 2244 | | |
2209 | 2245 | | |
2210 | 2246 | | |
2211 | 2247 | | |
2212 | | - | |
2213 | 2248 | | |
2214 | 2249 | | |
2215 | 2250 | | |
| |||
Lines changed: 85 additions & 50 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1604 | 1604 | | |
1605 | 1605 | | |
1606 | 1606 | | |
1607 | | - | |
| 1607 | + | |
| 1608 | + | |
| 1609 | + | |
1608 | 1610 | | |
1609 | 1611 | | |
1610 | 1612 | | |
| |||
1710 | 1712 | | |
1711 | 1713 | | |
1712 | 1714 | | |
1713 | | - | |
1714 | | - | |
1715 | | - | |
1716 | | - | |
1717 | | - | |
1718 | | - | |
1719 | | - | |
1720 | | - | |
1721 | | - | |
1722 | | - | |
1723 | | - | |
1724 | | - | |
1725 | | - | |
1726 | | - | |
1727 | | - | |
1728 | | - | |
1729 | | - | |
1730 | | - | |
1731 | | - | |
1732 | | - | |
1733 | | - | |
1734 | | - | |
1735 | | - | |
1736 | | - | |
1737 | | - | |
1738 | | - | |
1739 | | - | |
1740 | | - | |
1741 | | - | |
1742 | | - | |
1743 | | - | |
1744 | | - | |
1745 | | - | |
1746 | | - | |
| 1715 | + | |
| 1716 | + | |
| 1717 | + | |
| 1718 | + | |
| 1719 | + | |
| 1720 | + | |
| 1721 | + | |
| 1722 | + | |
| 1723 | + | |
| 1724 | + | |
| 1725 | + | |
| 1726 | + | |
1747 | 1727 | | |
1748 | 1728 | | |
1749 | 1729 | | |
1750 | 1730 | | |
1751 | 1731 | | |
1752 | | - | |
| 1732 | + | |
| 1733 | + | |
| 1734 | + | |
| 1735 | + | |
1753 | 1736 | | |
1754 | | - | |
1755 | | - | |
| 1737 | + | |
| 1738 | + | |
| 1739 | + | |
| 1740 | + | |
| 1741 | + | |
| 1742 | + | |
| 1743 | + | |
| 1744 | + | |
| 1745 | + | |
| 1746 | + | |
| 1747 | + | |
| 1748 | + | |
| 1749 | + | |
| 1750 | + | |
| 1751 | + | |
| 1752 | + | |
| 1753 | + | |
| 1754 | + | |
| 1755 | + | |
| 1756 | + | |
| 1757 | + | |
| 1758 | + | |
| 1759 | + | |
1756 | 1760 | | |
1757 | 1761 | | |
1758 | | - | |
1759 | | - | |
1760 | | - | |
| 1762 | + | |
| 1763 | + | |
| 1764 | + | |
1761 | 1765 | | |
1762 | 1766 | | |
1763 | 1767 | | |
| |||
1769 | 1773 | | |
1770 | 1774 | | |
1771 | 1775 | | |
1772 | | - | |
1773 | | - | |
1774 | | - | |
1775 | | - | |
1776 | | - | |
1777 | | - | |
1778 | | - | |
1779 | | - | |
| 1776 | + | |
| 1777 | + | |
| 1778 | + | |
| 1779 | + | |
| 1780 | + | |
| 1781 | + | |
| 1782 | + | |
| 1783 | + | |
| 1784 | + | |
| 1785 | + | |
1780 | 1786 | | |
1781 | 1787 | | |
1782 | 1788 | | |
| |||
1796 | 1802 | | |
1797 | 1803 | | |
1798 | 1804 | | |
| 1805 | + | |
| 1806 | + | |
| 1807 | + | |
| 1808 | + | |
| 1809 | + | |
| 1810 | + | |
| 1811 | + | |
| 1812 | + | |
| 1813 | + | |
| 1814 | + | |
| 1815 | + | |
| 1816 | + | |
| 1817 | + | |
| 1818 | + | |
| 1819 | + | |
| 1820 | + | |
| 1821 | + | |
| 1822 | + | |
| 1823 | + | |
| 1824 | + | |
| 1825 | + | |
1799 | 1826 | | |
1800 | 1827 | | |
1801 | 1828 | | |
| |||
2203 | 2230 | | |
2204 | 2231 | | |
2205 | 2232 | | |
| 2233 | + | |
| 2234 | + | |
| 2235 | + | |
| 2236 | + | |
| 2237 | + | |
| 2238 | + | |
| 2239 | + | |
2206 | 2240 | | |
| 2241 | + | |
| 2242 | + | |
2207 | 2243 | | |
2208 | 2244 | | |
2209 | 2245 | | |
2210 | 2246 | | |
2211 | 2247 | | |
2212 | | - | |
2213 | 2248 | | |
2214 | 2249 | | |
2215 | 2250 | | |
| |||
Lines changed: 0 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1980 | 1980 | | |
1981 | 1981 | | |
1982 | 1982 | | |
1983 | | - | |
1984 | 1983 | | |
1985 | 1984 | | |
1986 | 1985 | | |
| |||
0 commit comments