Naming Related Components in React
This is an example of how I like to name related subcomponents in React.
Meaning of Related
Related components are those that are used together to perform some greater task. They work together.
A related component might define its relationship as a subcomponent, used as a child of a parent component.
To make one useful, you want the other. They compose together.
A Naming Example
An example of related components might appear in a tab list UI, where the clickable labels in a row across the top, when clicked, switch between UI panels below.
A tab list might be represented by a few pieces, each a component itself:
export default {
List,
ListItem,
Panel
}
- The
List
is the container for the tabs - The
ListItem
is an individual tab label - The
Panel
is the wrapper for content that is hidden or shown
There's nothing revelatory about this naming individually. But this is designed so that the usage seems to make a lot of naming sense.
In a client application, one might use this as:
import Tab from './tab'
<Tab.List>
<Tab.ListItem id="menu1">Menu Item 1</Tab.ListItem>
<Tab.ListItem id="menu2">Menu Item 2</Tab.ListItem>
<Tab.ListItem id="menu3">Menu Item 3</Tab.ListItem>
</Tab.List>
<Tab.Panel labelledBy="menu1"><div>Content stuff 1</div></Tab.Panel>
<Tab.Panel labelledBy="menu2"><div>Content stuff 2</div></Tab.Panel>
<Tab.Panel labelledBy="menu2"><div>Content stuff 3</div></Tab.Panel>
The naming makes this work well at usage time:
- The
import
statement can be something with a clear alias of the UI element imported: that is,Tab
- The composition of components, between
Tab.List
,Tab.ListItem
, andTab.Panel
, clearly associates them all to theTab
experience via the prefix. - The
.
clearly separates the prefix or namespace. This can be a convention for this sort of required composition in a component or set of components. Otherwise, sometimes prefixes that are similar in a module are similar just because components in the same module are related to the same problem domain. - Here we can see the value of why we named the individual subcomponents as they are --
List
,ListItem
, andPanel
-- because they work well with theTab
prefix.
I like this naming strategy. Do you? What other strategies in naming do you use when trying to associate components?