Installation
The installation process consists of two parts: installing the core library (around 3KB gzipped piece of code that runs in your users' browsers and handles the core logic) and an optional compile-time plugin (for transpiling JSX syntax for your slot elements into regular function invocations).
Install the Core Library
npm i @beqa/react-slotsInstall the Compile-Time Plugin (Optional)
The transform-react-slots plugin is necessary to transform slot elements
returned by useSlot() into function invocations, as demonstrated below:
// Before transpilation
<slot.default prop1={"foo"} prop2={42}>
Fallback
</slot.default>;
// After transpilation
slot.default("Fallback", { prop1: "foo", prop2: 42 });To install the compile-time plugin, check which build tool is used in your project and follow the specific instructions provided for that tool. Many projects use Webpack and Babel, but other projects might utilize different tools such as Vite, esbuild, or Rollup.
Note: Installing the compile-time plugin is recommended, but you have the option to skip it and start using slots as functions immediately.
Nextjs
Install the core library if you haven't already
npm i @beqa/react-slotsInstall @beqa/unplugin-transform-react-slots
npm i -D @beqa/unplugin-transform-react-slotsImport and add webpack plugin to the plugins list
const { default: unplugin } = require("@beqa/unplugin-transform-react-slots");
const nextConfig = {
webpack(config) {
// Add this line
config.plugins.unshift(unplugin.webpack());
// Don't forget to return config
return config;
},
};
module.exports = nextConfig;CRA
If you have an un-ejected Create React App project and want to keep it that way,
we recommend using Craco. Craco allows you to override Create React App's
configuration without ejecting. You can read about
how to start using Craco and the risks associated with it (opens in a new tab).
If your project is ejected, follow the instructions for configuring
react-slots with Babel.
Install the core library if you haven't already
npm i @beqa/react-slotsInstall @beqa/unplugin-transform-react-slots
npm i -D @beqa/unplugin-transform-react-slotsAdd a craco.config.js file in the root of your project and include the Webpack
plugin:
const { default: unplugin } = require("@beqa/unplugin-transform-react-slots");
module.exports = {
webpack: {
plugins: { add: [unplugin.webpack()] },
},
};Vite
Install the core library if you haven't already
npm i @beqa/react-slotsInstall @beqa/unplugin-transform-react-slots
npm i -D @beqa/unplugin-transform-react-slotsAdd unplugin.vite to yourvite.config.js before the react plugin:
import unplugin from "@beqa/unplugin-transform-react-slots";
import react from "@vitejs/plugin-react";
export default {
// Make sure unplugin.vite is specified before react in your plugins list
plugins: [unplugin.vite(), react()],
};esbuild
Install the core library if you haven't already
npm i @beqa/react-slotsInstall @beqa/unplugin-transform-react-slots
npm i -D @beqa/unplugin-transform-react-slotsAdd unplugin.esbuild to your plugins list in your esbuild config
import unplugin from "@beqa/unplugin-transform-react-slots";
await build({
plugins: [unplugin.esbuild()],
});Rollup
Install the core library if you haven't already
npm i @beqa/react-slotsInstall @beqa/unplugin-transform-react-slots
npm i -D @beqa/unplugin-transform-react-slotsAdd the unplugin.rollup to your plugins list before syntax transformation
plugins in your rollup.config.js:
import unplugin from "@beqa/unplugin-transform-react-slots";
export default {
...
plugins: [
unplugin.rollup(),
// ... other plugins
]
}Babel
Install the core library if you haven't already
npm i @beqa/react-slotsInstall @beqa/babel-plugin-transform-react-slots
npm i -D @beqa/babel-plugin-transform-react-slotsAdd the plugin to your .babelrc file.
{
"plugins": ["@beqa/babel-plugin-transform-react-slots"]
}Performance Optimization with Unplugin Options
This section is only relevant to you if you've been instructed to install
@beqa/unplugin-transform-react-slots for your build tool.
type Options = {
include: RegEx;
exclude: RegEx | RegEx[];
};
const options = {
include: /\.(tsx)|(jsx)|(js)/,
} satisfies Options;
unplugin.yourBundler(options);unplugin-transform-react-slots is designed to be fast at finding and
transforming React slots. By default, it checks every JavaScript (js), JSX
(jsx), and TypeScript (tsx) file in your project, excluding files in the
node_modules directory. However, you can optimize its performance further by
using specific options.
include Option
If you have other tools configured in a way that JSX syntax is only used in certain files, you can provide the include regular expression (RegEx) as an argument to your plugin. For instance:
unplugin.yourBundler({ include: /\.(tsx)|(jsx)/ });With this configuration, the plugin will only check .tsx and .jsx files in your project, improving performance by skipping unnecessary files.
exclude Option
Additionally, you can use the exclude option to exclude specific files or
directories from being processed. This can be useful for excluding configuration
files or large files that don't need slot transformation: