모달 표시/숨기기
12673 단어 프로그래밍 공부 일기모달React
프로그래밍 공부 일기
2020년 6월 22일 Progate Lv.144
React III
모달 (팝업)에 대해 배웠습니다.
모달 숨기기
모달은 클릭에 의해 표시/비표시가 바뀐다. 그래서, 모달이 표시되어 있는지 어떤지의 정보를 state로 한다.
isModalOpen이라는 진위치형의 state를 준비해, true이면 표시, false이면 비표시로 한다. 즉, true일 때는 모달의 JSX가 존재하고, false일 때는 모달의 JSX는 존재하지 않게 한다.
lesson.js (state 정의)class Lesson extends React.Component{
constructor(props){
super(props);
this.props={isModalOpen:false}
};
...
JSX 및 변수
JSX는 변수에 대입해, {変数名}
로 표시할 수 있다.
sample.jsrender(){
let text=<p>Hello Reacr</p>
return(
<div>
<h1>Hello World</h1>
{text}
</div>
);
}
변수 text에 대입한 JSX를 표시하고 있다.
JSX와 if 문
isModalOpen이 true일 때만 표시한다. 변수 모드를 준비하여 조건 분기를 수행합니다.
Lesson.jsrender()[
let modal;
if(this.state.isModalOpen){ //isModalOpenがtrueのときに実行される
modai= //modalのJSX部分
}
return(
...
<div>
<p>{this.props.name}<p/>
{modal} //変数modalに代入されたJSXが表示される。
</div>
...
모달 표시
Lessonjs (state를 변경하는 메소드 작성)handleClickLesson(){
this.setState({isModal:true});
Lessonjs (메소드를 호출하는 onClick 이벤트 설정)//画像をクリックしたときにモーダルを表示
<img src={this.props.image}
{onClick={()=> {this.handleClickLesson()} } />
모달 숨기기
"트위닝"버튼을 클릭하면 모달을 닫습니다.
Lessonjs (state를 변경하는 메소드 작성)handleClickClose(){
this.setState({isModal:false});
Lessonjs (메소드를 호출하는 onClick 이벤트 설정)//画像をクリックしたときにモーダルを表示
<img src={this.props.image}
{onClick={()=> {this.handleClickClose()} } />
테스트 코드
Lesson.jsimport React from 'react';
class Lesson extends React.Component {
constructor(props) {
super(props);
this.state = {isModalOpen: false};
}
handleClickLesson() {
this.setState({isModalOpen: true});
}
handleClickClose(){
this.setState({isModalOpen:false});
}
render() {
let modal;
if (this.state.isModalOpen) {
modal = (
<div className='modal'>
<div className='modal-inner'>
<div className='modal-header'></div>
<div className='modal-introduction'>
<h2>{this.props.name}</h2>
<p>{this.props.introduction}</p>
</div>
<button
className='modal-close-btn'
onClick={()=>{this.handleClickClose()}}
>
とじる
</button>
</div>
</div>
);
}
return (
<div className='lesson-card'>
<div
className='lesson-item'
onClick={() => {this.handleClickLesson()}}
>
<p>{this.props.name}</p>
<img src={this.props.image} />
</div>
{modal}
</div>
);
}
}
export default Lesson;
Reference
이 문제에 관하여(모달 표시/숨기기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mzmz__02/items/1c18eebe057a9f2d8083
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class Lesson extends React.Component{
constructor(props){
super(props);
this.props={isModalOpen:false}
};
...
render(){
let text=<p>Hello Reacr</p>
return(
<div>
<h1>Hello World</h1>
{text}
</div>
);
}
render()[
let modal;
if(this.state.isModalOpen){ //isModalOpenがtrueのときに実行される
modai= //modalのJSX部分
}
return(
...
<div>
<p>{this.props.name}<p/>
{modal} //変数modalに代入されたJSXが表示される。
</div>
...
handleClickLesson(){
this.setState({isModal:true});
//画像をクリックしたときにモーダルを表示
<img src={this.props.image}
{onClick={()=> {this.handleClickLesson()} } />
handleClickClose(){
this.setState({isModal:false});
//画像をクリックしたときにモーダルを表示
<img src={this.props.image}
{onClick={()=> {this.handleClickClose()} } />
import React from 'react';
class Lesson extends React.Component {
constructor(props) {
super(props);
this.state = {isModalOpen: false};
}
handleClickLesson() {
this.setState({isModalOpen: true});
}
handleClickClose(){
this.setState({isModalOpen:false});
}
render() {
let modal;
if (this.state.isModalOpen) {
modal = (
<div className='modal'>
<div className='modal-inner'>
<div className='modal-header'></div>
<div className='modal-introduction'>
<h2>{this.props.name}</h2>
<p>{this.props.introduction}</p>
</div>
<button
className='modal-close-btn'
onClick={()=>{this.handleClickClose()}}
>
とじる
</button>
</div>
</div>
);
}
return (
<div className='lesson-card'>
<div
className='lesson-item'
onClick={() => {this.handleClickLesson()}}
>
<p>{this.props.name}</p>
<img src={this.props.image} />
</div>
{modal}
</div>
);
}
}
export default Lesson;
Reference
이 문제에 관하여(모달 표시/숨기기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mzmz__02/items/1c18eebe057a9f2d8083텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)