-
-
Couldn't load subscription status.
- Fork 1.1k
Description
Preface: I know this topic has already been brought up a few times (#1295, #967, #1321) but I have a use-case that I haven't seen mentioned before, and a proposed solution that side-steps the inherent complexity of this problem, while giving power-users what they need.
The problem
- Our stack already uses a jsx pragma and so we cannot use Emotion's.
- At the same time we do server-side rendering with
createCache. So we don't need (or want) the functionality of adding sibling<style>tags. - We really need the ability to convert style objects to class names with just hooks, no render-prop components, because:
- we have hooks that compose hooks that compose hooks, and components have no place there.
- render-prop components mess with the es-lint hooks plugin when a hook is needed inside the render function.
The main issue as I understand it is that most people are going to need the version of Emotion that adds <style> tags next to the component that rendered them, so a hook is out of the question as it can't do that (at least not in a clean way). And exposing a hook that's only useful if you roll your own server-side rendering isn't ideal...
Proposed solution
So I propose that instead of Emotion supplying users with a potentially confusing hook API, just expose some of the functionality that would be needed to create it (the guts of ClassNames) and let us power-users roll our own. That way we're not leading less-informed users astray from the pit of success, but also letting more advanced users integrate Emotion into their existing stack without pain.
I'd be happy to take a stab at a PR that makes the minimal changes necessary to move this problem into 'user-land'. Is that something you'd be willing to consider merging?