An easy-to-use dockable window manager for React, fully embracing hooks!
Your custom content's lifecycle hooks are respected, so useState, useEffect, etc. work out of the box, and state carries over even if the user rearranges their panels.
npm install @hlorenzi/react-dockable import * as React from "react" import * as Dockable from "@hlorenzi/react-dockable" function App() { // Create the base state, // and set up initial content const state = Dockable.useDockable((state) => { Dockable.createDockedPanel( state, state.rootPanel, Dockable.DockMode.Full, <Counter/>) }) // Render the root Container element, // which handles all interactions on your behalf return <div style={{ width: "100vw", height: "100vh", }}> <Dockable.Container state={ state }/> </div> } // Your custom element! function Counter() { const [value, setValue] = React.useState(0) const countUp = () => setValue(value + 1) const ctx = Dockable.useContentContext() ctx.setTitle(`Count: ${ value }`) ctx.setPreferredSize(300, 250) return <div> { value } <button onClick={ countUp }>Count up!</button> </div> }