
Product
Introducing Webhook Events for Alert Changes
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.
react-hooks-use-modal
Advanced tools
This is a react hook which can open the modal easily.
import React, { useState, useCallback } from 'react';
import { createRoot } from 'react-dom/client';
import { useModal } from 'react-hooks-use-modal';
const App = () => {
const [Modal, open, close, isOpen] = useModal('root', {
preventScroll: true,
focusTrapOptions: {
clickOutsideDeactivates: false,
},
});
return (
<div>
<p>Modal is Open? {isOpen ? 'Yes' : 'No'}</p>
<button onClick={open}>OPEN</button>
<Modal>
<div>
<h1>Title</h1>
<p>This is a customizable modal.</p>
<button onClick={close}>CLOSE</button>
</div>
</Modal>
</div>
);
};
const root = createRoot(document.getElementById('root'));
root.render(<App />);
ModalComponent
Type: React.FC<{ title?: React.ReactNode; description?: React.ReactNode, children?: React.ReactNode, additionalProps?: Record<string, unknown> }>
Modal component that displays children in the screen center.
If you specify title and description, additionalProps you must implement custom components with the components option's Modal property and render in them.
See EXAMPLE below for details.
https://github.com/microcmsio/react-hooks-use-modal/blob/master/examples/src/js/components-option/index.tsx
openFunc
A function to open modal.
closeFunc
A function to close modal.
isOpenBool
A boolean to know the state whether modal is open or not.
domNode
Optional.
Default value is 'root'.
Modal component uses React-Portal.
You can specify the output destination domNode with this argument
initialValue
Optional.
Default value is false.
This is useful when you want to mount the modal in an open position.
preventScroll
Optional to prevent scrolling while modal is open.
Default value is false.
focusTrapOptions
Override the focus-trap options used internally.
For example, to prevent a modal from closing when a non-modal element is clicked, do the following
useModal('root', {
focusTrapOptions: {
clickOutsideDeactivates: false,
},
});
components
Optional.
This is an option to customize the ModalWrapper returned by useModal.
Use as follows
useModal('root', {
components: {
Modal: ({ title, description, children }) => {
return (
<div
style={{
padding: '60px 100px',
backgroundColor: '#fff',
borderRadius: '10px',
}}
>
{title && <h1>{title}</h1>}
{description && <p>{description}</p>}
{children}
</div>
);
},
Overlay: () => {
return (
<div
style={{
position: 'fixed',
top: 0,
left: 0,
bottom: 0,
right: 0,
backgroundColor: 'rgba(0, 0, 0, 0.5)',
}}
/>
);
},
Wrapper: ({ children }) => {
return (
<div
style={{
position: 'fixed',
top: 0,
left: 0,
bottom: 0,
right: 0,
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
zIndex: 1000,
}}
>
{children}
</div>
);
},
},
});
Combined with ModalProvider (described below), you can specify the default style for all useModal in the project.
The ModalProvider component allows you to apply a common default configuration to all useModal hooks.
<ModalProvider {...options}>
<Component />
</ModalProvider>
The following example sets all useModal hooks to not scroll outside the modal by default.
const Component1 = () => {
const [Modal] = useModal('root');
return (
<Modal>
<h2>Common</h2>
</Modal>
);
};
const Component2 = () => {
const [Modal] = useModal('root', { preventScroll: false }); // override
return (
<Modal>
<h2>Override options</h2>
</Modal>
);
};
const App = () => {
return (
<ModalProvider preventScroll>
<Component1 />
<Component2 />
</ModalProvider>
);
};
https://microcmsio.github.io/react-hooks-use-modal/
$ yarn
$ yarn build
$ yarn watch
$ yarn start:demo
Then access it on http://localhost:3001/react-hooks-use-modal
MIT
FAQs
A react hook which can open the modal with react-portal
We found that react-hooks-use-modal 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.

Product
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.

Security News
ENISA has become a CVE Program Root, giving the EU a central authority for coordinating vulnerability reporting, disclosure, and cross-border response.

Product
Socket now scans OpenVSX extensions, giving teams early detection of risky behaviors, hidden capabilities, and supply chain threats in developer tools.