React
Portal
ReactDom
React 提供了 Portal 方法,讓 children 可以 render 到 parent component DOM 樹以外的 DOM 節點。
像是以下範例
...
return (
<React.Fragment>
<MyModal />
<MyForm />
</React.Fragment>
)
...
大至會產出以下 Real DOM
<section>
<h2>Some Other content</h2>
<div class='my-modal'>
<h2>My Modal Title</h2>
</div>
<form>
<label>Username</label>
<input type='text' />
</form>
</section>
但當 Modal 元件位置越來越深時,就會產生一些問題,在 HTML 語意上 Modal 作用使覆蓋整個頁面,嵌套在在某個元件中是較不理想的!
到 public/index.html 找到 id 為 root 的 DOM,並在前方新增 modal-root
& backdrop-root
id
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="backdrop-root"></div>
<div id="modal-root"></div>
<div id="root"></div>
...
</body>
到 ErrorModal 元件中有 backdrop
以及 modal
兩個平行的 div
const ErrorModal = (props) => {
return (
<>
<div className={classes.backdrop} />
<Card className={classes.modal}>
....
</Card>
</>
);
};
export default ErrorModal;
將 backdrop
以及 modal
分開定義變數
ReactDOM.createPortal()
掛載至指定 DOM// ReactDOM
import ReactDOM from "react-dom";
// Backdrop
const Backdrop = (props) => {
return <div className={classes.backdrop} />;
};
// ModalOverlay
const ModalOverlay = (props) => {
return (
<Card className={classes.modal}>
...
</Card>
);
};
// 掛載節點
const ErrorModal = (props) => {
return (
<>
{ReactDOM.createPortal(
<Backdrop />,
document.getElementById("backdrop-root")
)}
{ReactDOM.createPortal(
<ModalOverlay />,
document.getElementById("modal-root")
)}
</>
);
};
export default ErrorModal;
到 chrome 觀察 可以發現剛剛新增的兩個節點裡面都有指定的元件在內了!
Learn More →
觀察入口 index.js,使用 ReactDOM.render
訪法將 JSX 渲染至 root DOM 上,而 React.createPortal
也是使用差不多的邏輯
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
差別是我們不是將 ErrorModal 元件另外在另一個 DOM 上做渲染,而是改變已渲染完成的元件掛載的節點。
PrimaryButton type: 'gold' | 'green' | 'dark-green' size: 'mini' | 'small' | 'middle' | 'large'  type: 'gold' | 'blue' | 'purple' size: 'mini' | 'small' | 'middle' | 'large' 
Jan 11, 2023知識背景 編碼 Encode 加密 Encrypt 雜湊 hash 綜合應用 編碼 Encode 換個方式來呈現資料,沒有任何安全性,主要看編碼後的用途 QRcode, UTF8. Base64 等等
May 8, 2022目標客層 想要出租自己的登山或露營等各類戶外用品的使用者 可以是個人群體出租或是商家出租 想體驗戶外活動但還不想花太多錢買裝備的使用者 價值主張 是什麼樣的產品與服務? 租借平台 提供專門的登山露營租賃平台給想要把自己用品出租的使用者
Feb 21, 2022[time=Thu, Feb 3, 2022 5:45 PM] 使用 webpack 編譯打包各個模組後,產生 /dist 目錄資料夾內容供部署至 server 上使用,客戶端在透過瀏覽器訪問此網站獲取內容,然而在獲取內容上是較消耗時間資源的。 瀏覽器使用了緩存的技術,搭配 Webpack 配置將資源緩存至客戶端中,避免每次的重新下載,達到降低網路流量以及服務器的壓力,使網站加載速度更快。 在 web 應用程式中,往往修改較頻繁的是我們的業務邏輯,但是第三方庫則是不會頻繁更動,這時我們可以透過 webpack 合理的劃分我們 chunk。 Webpack 中拆分 chunk 可以分為:
Feb 8, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up