React Portal
ユーザーがフォームにエラーをコミットするとモデルがオフセットする構成部品を作成します.
この場合、最も外側である所望の位置に低モードを送信する機能を有するのが、createPortal方式である.
import Card from './Card';
import Button from './Button';
import classes from './ErrorModal.module.css';
const ErrorModal = (props) => {
return (
<div>
<div className={classes.backdrop} onClick={props.onConfirm} />
<Card className={classes.modal}>
<header className={classes.header}>
<h2>{props.title}</h2>
</header>
<div className={classes.content}>
<p>{props.message}</p>
</div>
<footer className={classes.actions}>
<Button onClick={props.onConfirm}>Okay</Button>
</footer>
</Card>
</div>
);
};
export default ErrorModal;
上のコードは間違いとは言えません.しかし、これは明らかに理想的なコードではありません.modelはページ全体を上書きするので、一番外側は構造的に正しいです.この場合、最も外側である所望の位置に低モードを送信する機能を有するのが、createPortal方式である.
ReactDOM.createPortal(child, container);
createPortalメソッドを使用して、次のように変更します.import React from 'react';
import ReactDOM from 'react-dom';
import Card from './Card';
import Button from './Button';
import classes from './ErrorModal.module.css';
const Backdrop = (props) => {
return <div className={classes.backdrop} onClick={props.onConfirm} />;
};
const Overlay = (props) => {
return (
<Card className={classes.modal}>
<header className={classes.header}>
<h2>{props.title}</h2>
</header>
<div className={classes.content}>
<p>{props.message}</p>
</div>
<footer className={classes.actions}>
<Button onClick={props.onConfirm}>Okay</Button>
</footer>
</Card>
);
};
const ErrorModal = (props) => {
return (
<>
{ReactDOM.createPortal(
<Backdrop onConfirm={props.onConfirm} />,
document.getElementById('backdrop')
)}
{ReactDOM.createPortal(
<Overlay
title={props.title}
message={props.message}
onConfirm={props.onConfirm}
/>,
document.getElementById('overlay')
)}
</>
);
};
export default ErrorModal;
Reference
この問題について(React Portal), 我々は、より多くの情報をここで見つけました https://velog.io/@dinomoon/React-Portalテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol