RC Drawer Component for React
rc-drawer is a foundational, highly customizable drawer component for React applications, providing animated side panels typically used for navigation menus or ancillary content. Historically, it was a popular choice within the react-component ecosystem for creating fluid, accessible drawer interfaces. The package, currently stable at version 7.3.0, primarily offered imperative and declarative APIs for controlling visibility, position, and animation. However, rc-drawer has been superseded and effectively deprecated. Active development and new features are now exclusively happening under the renamed package, `@rc-component/drawer`, which started its versioning from 1.0.0 and is actively maintained with a regular release cadence. Developers are strongly advised to migrate to `@rc-component/drawer` for ongoing support, bug fixes, and new functionalities like resizable drawers.
Common errors
-
Module not found: Can't resolve 'rc-drawer'
cause The package `rc-drawer` is not installed or the project has been partially migrated to `@rc-component/drawer` but still uses the old import path.fixInstall the correct package: `npm install rc-drawer` for legacy projects, or `npm install @rc-component/drawer` and update imports for modern projects. -
Property 'destroyOnClose' does not exist on type 'IntrinsicAttributes & { children?: ReactNode; open?: boolean; ... }'cause Using the old prop name `destroyOnClose` with `@rc-component/drawer` versions 1.1.0 or newer, where the prop was renamed.fixUpdate the prop name from `destroyOnClose` to `destroyOnHidden`. -
Property 'afterVisibleChange' does not exist on type 'IntrinsicAttributes & { children?: ReactNode; open?: boolean; ... }'cause Using the old prop name `afterVisibleChange` with `rc-drawer` v8.0.0 or `@rc-component/drawer` v1.0.0 and newer, where the prop was renamed.fixUpdate the prop name from `afterVisibleChange` to `afterOpenChange`.
Warnings
- breaking The `rc-drawer` package has been effectively deprecated and renamed to `@rc-component/drawer`. All future development, bug fixes, and new features will only be released under the `@rc-component/drawer` package. While `rc-drawer` version 7.3.0 is stable, it will not receive further updates. Migration to `@rc-component/drawer` is strongly recommended for ongoing support.
- breaking The prop `destroyOnClose` was renamed to `destroyOnHidden` in `@rc-component/drawer@1.1.0`. If you are migrating from an older `rc-drawer` version, ensure you update this prop name.
- breaking The prop `afterVisibleChange` was renamed to `afterOpenChange` in `rc-drawer` v8.0.0 (which corresponds to `@rc-component/drawer@1.0.0`). Projects migrating from `rc-drawer` v7.x or earlier should update this prop.
- gotcha The internal DOM structure for the drawer content was updated from `content` to `section` in `rc-drawer` v8.0.0 (and `@rc-component/drawer@1.0.0`). If your CSS or JavaScript relies on specific DOM selectors for styling or manipulating the drawer content, these selectors might break.
Install
-
npm install rc-drawer -
yarn add rc-drawer -
pnpm add rc-drawer
Imports
- Drawer
const Drawer = require('rc-drawer');import Drawer from 'rc-drawer';
- DrawerProps
import { DrawerProps } from 'rc-drawer';import type { DrawerProps } from 'rc-drawer'; - Drawer (migration)
import Drawer from '@rc-component/drawer';
Quickstart
import Drawer from 'rc-drawer';
import React, { useState } from 'react';
import ReactDOM from 'react-dom';
import './index.css'; // Assume basic styling for visibility
const App = () => {
const [open, setOpen] = useState(false);
const toggleDrawer = () => {
setOpen(!open);
};
return (
<div>
<button onClick={toggleDrawer}>Open Drawer</button>
<Drawer
open={open}
onClose={toggleDrawer}
placement="right"
width={300}
handler={false} // Disable default handler
maskClosable={true}
>
<div style={{ padding: '20px' }}>
<h2>Drawer Content</h2>
<p>This is the content inside the drawer.</p>
<button onClick={toggleDrawer}>Close Drawer</button>
</div>
</Drawer>
</div>
);
};
// Mount the app to a DOM element, e.g., <div id="root"></div>
ReactDOM.render(<App />, document.getElementById('root'));
/* Example index.css to make drawer visible: */
/*
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
}
*/