Итак, у меня есть функциональный компонент - панель инструментов. Его родителем является текстовый редактор. Панель инструментов имеет много дочерних компонентов, которые являются кнопками. При нажатии на одну из этих кнопок я хочу, чтобы появился модал. Логи c useModal
. Но FormatToolbarModal
не появляется.
Я читал, что весь рендеринг компонента должен выполняться пользовательским компонентом верхнего уровня? Но я не уверен, где go оттуда. Я хочу, чтобы этот модал можно было использовать повторно, так как другие опции на панели инструментов будут его использовать.
index.jsx
ReactDOM.render(routes, document.getElementById("app"));
App.jsx
const App = () => {
return (
<TextEditor/>
)
}
TextEditor.jsx
const TextEditor = () => {
return(
<FormatToolbar>
<FormatToolbarBlock format="link" icon={link2} />
<FormatToolbarBlock format="image" icon={image} />
</FormatToolbar>
... Editor stuff
)
}
const FormatToolbarBlock = ({ format, icon }) => {
const editor = useSlate();
const {isShowing, toggle} = useModal();
return (
<FormatButton
onMouseDown={e => {
if(format === 'link'){
toggle(e);
<FormatToolbarModal <---- here is my issue
isShowing={isShowing}
hide={toggle}
/>
} else if {
...
}
}}
/>
)
}
UseModal.jsx
const useModal = () => {
const [isShowing, setIsShowing] = useState(false);
function toggle() {
setIsShowing(!isShowing);
}
return {
isShowing,
toggle,
}
};
export default useModal;
FormatToolbarModal. jsx
const FormatToolbarModal = ({ isShowing, hide }) => isShowing ? ReactDOM.createPortal(
<React.Fragment>
<p>I am a modal</p>
</React.Fragment>, document.body
): null;
export default FormatToolbarModal;
Надеюсь, что из этого вы можете увидеть мою проблему яснее Я новичок в React и крюках, так что любые советы приветствуются.
Спасибо!