DEV Community

Discussion on: Polymorphic Components: Authoring flexible and reusable components.

Collapse
 
fjones profile image
FJones

This is exactly counter to react paradigms (and only sort of "polymorphism").

The "react way" would be to write a Card component that accepts an icon and a className, and then having e.g. a ReactCard that renders Card with preset values for the icon and className. Coupling the Card directly with its supported variants actually hugely limits the reusability and flexibility, and requires that the Card be constantly kept up to date with all possible variants.

Collapse
 
paul_emechebe profile image
Paul-Simon Emechebe

Okay so what I'm understanding from this is that

  1. Create components dedicated to a particular variant e.g ReactCard.
  2. Make those components render another component called Card, where the Card component accepts an icon and a className. Right?
Collapse
 
fjones profile image
FJones

Precisely. I've made a few adjustments to make it work on codepen, but the gist is there:

Rather than selecting the variant settings from within the Card, we supply the variant settings to the card. The result is ultimately still that you just call, e.g. <ReactCard /> with your show, headerText, and text props, but now you can easily extend this to support, for instance, an AngularCard without having to touch Card at all: