ダイスまど
モードウィンドウ
スプリントにはモダという言葉がありますが、この奇妙な語感が何なのか知りたいです.
英語の辞書の中の言葉スタイル形態上の法医.このように使うのは、実際の用途とは全く関係ないようです.
Modelの場合、ウィキペディア「ユーザー・インタフェース設計の概念では、サブウィンドウから親ウィンドウに戻る前に、アプリケーションのメイン・ウィンドウのワークフローを阻害するユーザーのインタラクティブな操作を要求するウィンドウです.通常、ダイアログ・ボックスを呼び出すときによく使用されるため、モード・ダイアログ・ボックスと呼ばれます.」ファイルを開く/保存するダイアログボックスは分かりやすいです.」と説明しています.
通常、ポップアップウィンドウとモードウィンドウを比較するときは、サブウィンドウから親ウィンドウに継承する概念に重点を置いて比較します.modalに近いのは、アプリケーションのメインウィンドウのワークフローを妨げることを意味します.
モードウィンドウ(サブページ)を開くと、モードウィンドウが終了するまで親ページは機能しません.レッスンを追加します.
モードウィンドウと名前を付けた場合、このモードウィンドウの操作が終了するまで、他の操作は実行できません.Modalウィンドウの意味と重要性はここにあります.他のタスクに移動する前に必要な情報伝達を行うか、必要なデータを受信するためにプロシージャを追加できます.
リアクターからモデルウィンドウを作成するには
親構成部品
//ModalContainer.jsx
import React, { useState } from 'react'
import Modal from './Modal'
const ModalContainer = () => {
const [modalOpen, setModalOpen] = useState(false)
const modalClose = () => {
setModalOpen(!modalOpen)
}
return (
<>
<button onClick={modalClose}>Click</button>
{ modalOpen && <Modal modalClose={modalClose}></Modal>}
</> // 조건부 사용
)
}
export default ModalContainer
ボタンを押すと、モードClose関数が起動します!modopenはtrue値を返します.次に、モード構成部品を実行します.
モード構成部品
// Modal.jsx
import React from 'react'
import './Modal.scss'
const Modal = ({modalClose}) => {
const onCloseModal = (e) => {
console.log('e.target: ', e.target)
console.log('e.tarcurrentTargetget: ', e.currentTarget)
if(e.target === e.currentTarget){
modalClose()
}
}
return (
<div className="modal__container" onClick = {onCloseMedal}>
<div className="modal">
<button className="modal__button" onClick={modalClose}> Modal Close</button>
</div>
</div>
)
}
export default Modal
このセクションでは、Stateドラッグ&ドロップ、親コンポーネントから子ウィンドウの開くまで、サブウィンドウから親ウィンドウにデータを渡し、false値にデータを再変換する必要があることに注意してください.したがって、{modalClose}をサブエレメントに渡し、その値を再取得する必要があります.
モードcss設定
// Modal.scss
.modal__container{
width: 100%;
height: 100vh;
background-color: rgba(0,0,0,0.4);
z-index: 10;
position: fixed;
top: 0;
left: 0;
.modal{
width: 300px;
height: 150px;
background-color: #fff;
// Modal 창 브라우저 가운데로 조정
position: absolute;
left: 50%;
top:50%;
transform: translate(-50%, -50%);
z-index:100;
.modal__button{
position: relative;
left: 50%;
top:50%;
transform: translate(-50%, -50%);
}
}
}
自ら。
ボタンを押すと、モードウィンドウを開いたり閉じたりするのは安全です.しかし、満足すれば、開発ではありません.Modelコンポーネントウィンドウでモデルウィンドウを開くハンドルを宣言し、ボタンをtrueからfalse、falseからtrueに変更します.
<ModalContainer >
<ModalBtn onClick = {openModalHandler} >
{isOpen ? 'Opened!' : 'Open Modal'}
{isOpen && <ModalBackdrop>
<ModalView>
<ModalViewButton onClick = {openModalHandler}>
X
</ModalViewButton>
"Hello states"
</ModalView>
</ModalBackdrop>}
</ModalBtn>
</ModalContainer>
ずっと下に掛けていたのに、問題があったようです.だからボタンが終わったら、独立したものと見なして解決します.
調べてみましたが、「アクティブバブル」が引き起こした問題です.エレメントにイベントが発生すると、親エレメントのイベントも発生します.
この場合、私のように切断するか、イベントが発生した部分を{e=>e.openModalHandler}に置き換えて、このような状況を回避できます.
<ModalContainer >
<ModalBtn onClick = {openModalHandler} >
{isOpen ? 'Opened!' : 'Open Modal'}
</ModalBtn>
{isOpen && <ModalBackdrop>
<ModalView>
<ModalViewButton onClick = {openModalHandler}>
X
</ModalViewButton>
"Hello states"
</ModalView>
</ModalBackdrop>}
</ModalContainer>
const ModalContainer = styled.div`
text-align: center; //가운데 정렬
margin: 125px
// 125px 만큼 여분
// auto;auto : 가로 중앙에 배치한다는 뜻, 그리고 자연스럽게 좌우 여백은 균등하게 배분
width: 100%; //영역을 다루는게 아직 미숙하다...
height: 5rem;
`;
const ModalBackdrop = styled.div`
// TODO : Modal이 떴을 때의 배경을 깔아주는 CSS를 구현합니다.
top: 0;
right: 0;
bottom: 0;
left: 0;
position: fixed;
//position : absolute 원래 위치와 상관없이 위치를 지정, 가장 가까운 상위 요소를 기준으로 위치가 결정
//position : fixed 원래 위치와 상관없이 위치를 지정, 상위요소에 영향받지않기 떄문에 화면이 바뀌더라도 고정된 위치를 설정할 수 있다
background-color: rgba(0, 0, 0, 0.6);
`;
const ModalView = styled.div.attrs(props => ({
role: 'dialog'
}))`
width: 300px;
height: 300px;
border-radius: 10px; // 모서리 깍기
background-color: white;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%); // 가운데 정렬하는 또 다른 방법
font-size: 2em;
color: black
`;
ソース
http://www.gnujava.com/board/article_view.jsp?article_no=3797&board_no=11&table_cd=EPAR04&table_no=04
https://dkmqflx.github.io/frontend/2021/04/26/react-modal-close/
https://www.zehye.kr/ios/2020/01/26/11iOS_modal/
Reference
この問題について(ダイスまど), 我々は、より多くの情報をここで見つけました https://velog.io/@tastestar/모달창テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol