What is a createLegacyRoot in react?

Viewed 705

I'm trying to replicate the same example as the react doc for context section, combined with react hook, but react devtool informs that my context is rendered by createLegacyRoot() from react-dom@17.0.2. It doesn't have any functionality issue, but I just wonder why it is legacy, is there any new way for creating context which is going to be proposed.

enter image description here

Here is what I'm doing.

const ThemeContext = React.createContext()

function ContextApp() {
  const [theme, setTheme] = React.useState('light')

  return (
    <ThemeContext.Provider value={[theme, setTheme]}>
      <ThemeSwitcherUseContext />
      <ThemeInformationClass />
      <ThemeInformationOldStyleConsumer />
    </ThemeContext.Provider>
  )
}


const ThemeSwitcherUseContext = () => {
  const [theme, setTheme] = React.useContext(ThemeContext)
  return (
    <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
      Switch to {theme === 'light' ? 'dark' : 'light'}
    </button>
  )
}

class ThemeInformationClass extends React.Component {
  static contextType = ThemeContext
  render() {
    return <div>class Theme="{this.context[0]}"</div>
  }
}

const ThemeInformationOldStyleConsumer = () => (
  <ThemeContext.Consumer>
    {([theme]) => <div>function Theme="{theme}"</div>}
  </ThemeContext.Consumer>
)
1 Answers
Related