![Create React App Officially Deprecated Amid React 19 Compatibility Issues](https://cdn.sanity.io/images/cgdhsj6q/production/04fa08cf844d798abc0e1a6391c129363cc7e2ab-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Create React App Officially Deprecated Amid React 19 Compatibility Issues
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
A single, configurable function used to construct BEM class names.
$ npm install bem-join
The bemJoin
function can be used to construct BEM class names. In most cases, you can just import this module and use it directly in each component. To illustrate this, let's create a simple Section
component:
// /src/components/Section.jsx
import { bemJoin } from 'bem-join';
const b = bemJoin('section');
The above example uses the default options of __
for the element separator and --
for the modifiers. If you need to customize the element and modifier separators, see the Custom Separators section below.
The new b
function from above can be called in two different ways:
b( [blockModifiers] )
Constructs the BEM block class names (e.g., foo foo--mod1 foo--mod2
).
See the BEMModifiers
section below for the modifiers interface.
b( elementName [, elementModifiers] )
Constructs the BEM element class names (e.g., foo__bar foo__bar--mod1 foo__bar--mod2)
).
See the BEMModifiers
section below for the modifiers interface.
Let's see it in action!
export const Section = ({ children, heading, isDark, isExpanded }) => (
<section className={b({ dark: isDark })}>
<h1 className={b('heading')}>{heading}</h1>
<div className={b('body', { expanded: isExpanded })}>{children}</div>
</section>
);
If isDark
and isExpanded
props were both truthy, the result would be the
following HTML:
<section class="section section--dark">
<h1 class="section__heading">
Heading
</h1>
<div class="section__body section__body--expanded">
children
</div>
</section>
Of course, if isDark
and isExpanded
were falsey, no --dark
or --expanded
modifiers would be constructed for them.
For ultimate reuse, you might consider allowing all of your components to accept an optional blockName
prop that changes the default block name. To do this, you just need to move your first bem-join
call inside of your render function. Here's an example of what that would look like:
export const Foo = ({ blockName, children }) => {
const b = bemJoin(blockName || 'foo');
return <div className={b()}>{children}</div>;
};
BEMModifiers
InterfaceAll modifiers must be provided as a Record
object with Boolean
or undefined
values:
export type BEMModifiers = Record<string, boolean | undefined>;
If your application requires custom element and modifier separators, you can easily do so by creating your own module that calls this one with configuration options as the first argument. Export the result of that and you can reuse it throughout your application. Here's an example:
// ./src/helpers/bem-join.js
import { bemJoin as _bemJoin } from 'bem-join';
export const bemJoin = _bemJoin({
elementSeparator: '__', // <-- default
modifierSeparator: '--', // <-- default
});
The exported function is now ready to be used in your application. Here's an example import for a component:
import { bemJoin } from '../helpers/bem-join';
From here, everything is the same as previously stated in the Usage section.
Run the following command:
$ npm test
.
FAQs
A function used to construct BEM class names.
The npm package bem-join receives a total of 132 weekly downloads. As such, bem-join popularity was classified as not popular.
We found that bem-join demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.