Coder Social home page Coder Social logo

Comments (10)

DiegoAndai avatar DiegoAndai commented on May 4, 2024 1

@mnajdova @siriwatknp @brijeshb42 what do you think about this one?

We could also plan to make the CssVarsProvider the only provider in v7. If we wish to do that, we would have to stabilize it in v6 as well as deprecate the ThemeProvider, marking it for removal in v7.

from material-ui.

DiegoAndai avatar DiegoAndai commented on May 4, 2024 1

@siriwatknp, May I assign this one to you? You seem to have better context for it right now, having worked on the CssVarsProvider and the zero-runtime side.

from material-ui.

oliviertassinari avatar oliviertassinari commented on May 4, 2024

Involved discussion: #41068

from material-ui.

siriwatknp avatar siriwatknp commented on May 4, 2024

I agree to stabilize the API. The big task left is to handle the performance. createTheme takes ~0.x ms but extendTheme takes ~2-5ms.

The best way I found to optimize this (for MUI system) is that the extendTheme should be called at build-time via a CLI.

from material-ui.

brijeshb42 avatar brijeshb42 commented on May 4, 2024

In that case, a user friendly way to do this would be to have a bundler plugin to inject the themes. It would be similar to a subset of what the zero runtime plugin does.

from material-ui.

DiegoAndai avatar DiegoAndai commented on May 4, 2024

I added an overview of the steps to the description. I also added it to the v6 milestone. It doesn't require breaking changes, but we have to deprecate ThemeProvider as soon as possible to give users time to adjust. Because of this, we'll schedule this work alongside the v6 work.

from material-ui.

siriwatknp avatar siriwatknp commented on May 4, 2024

@siriwatknp, May I assign this one to you? You seem to have better context for it right now, having worked on the CssVarsProvider and the zero-runtime side.

Yes, please assign it to me.

from material-ui.

oliviertassinari avatar oliviertassinari commented on May 4, 2024

I dove into the logic in: #41223.

  1. The behavior of the returned value by:
const { mode, systemMode } = useColorScheme();

is probably not right. I would expect these two should be undefined/null on the first render, unless { noSsr: true } is provided as an option. Otherwise, how are you supposed to handle hydration? The main downside is that it mean that the component renders twice, but this is more sound. And developers could still use { noSsr: true } like useMediaQuery provides.

  1. Also, I noticed that we don't memo the theme when we update the mode-related value. This means that we render all the descendants of that rely on the theme twice, this is horrible for performance. A reproduction: https://codesandbox.io/p/sandbox/gracious-currying-nxfvjd?file=%2Fsrc%2FDemo.tsx. Can someone create a dedicated GitHub issue for this? Thanks

Deprecate ThemeProvider in favor of CssVarsProvider

Are we sure about this? It doesn't sound compatible with keeping emotion running on the side.

from material-ui.

siriwatknp avatar siriwatknp commented on May 4, 2024

Deprecate ThemeProvider in favor of CssVarsProvider

I don't think we need to deprecate ThemeProvider, it's still useful for testing purpose.

from material-ui.

DiegoAndai avatar DiegoAndai commented on May 4, 2024

It doesn't sound compatible with keeping emotion running on the side.

Why? The current CssVarsProvider works with Emotion.

I don't think we need to deprecate ThemeProvider, it's still useful for testing purpose.

The purpose of deprecating it would be to be able to eventually remove it, to avoid confusing users about which one they should use, and to avoid duplicating work on maintaining and supporting two different theme providers.

from material-ui.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.