Skip to content

Given Emotion's Global component is used in a component that is lazy loaded and wrapped in Suspense, and the parent component is rendered upon initial page load, the global styles are not removed when that component is unmounted #3038

Description

@jmca

Current behavior:

Given Emotion's Global component is used in a component that is lazy loaded and wrapped in Suspense, and the parent component is rendered upon initial page load, the global styles are not removed when that component is unmounted.

Note that when Global is not in a component that is rendered on initial page load (while wrapped in Suspense), global styles are correctly removed when the parent component is unmounted.

Seps to reproduce:

Failing Test Case

Using this example: https://stackblitz.com/edit/react-ts-agivwh?file=App.tsx

  • Page initially loads Page1 component
  • Notice red body background
  • Click on the link "CLICK ME TO PAGE 2"
  • Page 2 is now rendered
    • Expected Result
      • Body should be white
    • Actual Result
      • Body is still red
        image
  • Click on the link "CLICK ME TO PAGE 1"
  • Page 1 is now rendered
    • Expected Result
      • Body has 1 red style entry
    • Actual Result
      • Body has 2 red style entries (because the original one was never removed)
        image

Passing Test Case

Using the same example at https://stackblitz.com/edit/react-ts-agivwh

  • In App.tsx, set the initial value of currentPage to the value of /page2, then reload web view
  • Page initially loads Page2 component
  • Notice the white background
  • Click on the link "CLICK ME TO PAGE 1"
  • Page 1 in now rendered
  • Notice the red background
  • Click on the link "CLICK ME TO PAGE 2"
  • Page 2 is loaded
  • Notice the white background

Global body style was correctly added and removed.


I tested this in an example without using suspense and everything works as expected following the same steps above

https://stackblitz.com/edit/react-ts-xwa9w5?file=App.tsx


image

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions