مثال ساده
با وارد کردن یک ElementPopper دیگر به عنوان مقدار popper ، میتوانید به هر تعداد که لازم دارید ، منو های تو در تو ایجاد کنید .
import React, { useState } from "react"
import ElementPopper from "react-element-popper"
export default function App() {
const [state, setState] = useState({})
const updateState = number => setState({ ...state, [number]: !state[number] })
const Button = ({ number }) => (
<button onClick={() => updateState(number)}>کلیک کنید</button>
)
return (
<ElementPopper
position="left"
element={<Button number={1} />}
popper={state[1] && (
<ElementPopper
position="left"
element={<Button number={2} />}
popper={state[2] && (
<ElementPopper
position="left"
element={<Button number={3} />}
popper={state[3] && <button>آخری</button>}
/>
)}
/>
)}
/>
)
}
لیست های کشویی تو در تو
در این مثال، با استفاده از قابلیتی که در بالا توضیح داده شد ، یک dropdown با منو های تو در تو ایجاد شده است .
فایل سی اس اس:
.dropdown {
margin: 0;
padding: 0;
list-style: none;
background-color: white;
border: 1px solid black;
}
.dropdown li {
min-width: 120px;
cursor: pointer;
padding: 2px 10px;
}
.dropdown li:hover,
.dropdown div.item:hover {
background: #ddd;
}
.dropdown div.item {
cursor: pointer;
height: 26px;
}
کد:
import React, { useState } from "react"
import ElementPopper from "react-element-popper"
export default function App() {
const [state, setState] = useState({})
const list = (
<ul className="dropdown">
<li>آیتم 1</li>
<li>آیتم 2</li>
<li>آیتم 3</li>
<li>آیتم 4</li>
</ul>
)
const mainList = (
<div className="dropdown">
{[1, 2, 3, 4].map((number, index) => (
<div
key={index}
className="item"
onMouseOver={() => setState({
main: true,
["item" + number]: true
})}
>
<ElementPopper
containerStyle={{ width: "120px" }}
element={(
<>
<span>آیتم {number}</span>
<span style={{ float: "left" }}>{">"}</span>
</>
)}
popper={state["item" + number] && list}
position="left-top"
/>
</div>
))}
</div>
)
return (
<ElementPopper
element={(
<button
onClick={() => setState({ main: !state.main })}
>
کلیک کنید
</button>
)}
popper={state.main && mainList}
position="bottom-right"
/>
)
}