44일차(2)/React(6) : jsx 객체 활용, setState 함수 실습
App04.js
//App04.js
import { Component } from "react";
class App extends Component{
state={
isRun:false
}
render(){
const myName="kim";
const myP= <p>p2입니다.</p>;
let isRun=false;
return(
<div className="container">
<h1>jsx 객체 활용하기</h1>
{"kim"}
<br />
{myName}
<br />
<p>p1입니다.</p>
{myP}
<h2>아래가 달려요 인지 달리지 않아요 인지 확인!</h2>
{ true ? <p>달려요</p> : <p>달리지 않아요</p> }
<h2>아래가 달려요 인지 달리지 않아요 인지 확인!</h2>
{ isRun ? <p>달려요</p> : <p>달리지 않아요</p> }
<h2>state 값 활용</h2>
달리려면 체크 <input type="checkbox" checked={this.state.isRun} onChange={this.handleChange} />
<br />
{ this.state.isRun ? <p>달려요</p> : <p>달리지 않아요</p> }
<h2>아래가 로그인중인지 확인!</h2>
{ true && <p>바나나님 로그인중...</p> }
<h2>아래가 로그인중인지 확인!</h2>
{ false && <p>바나나님 로그인중...</p> }
<h2>아래가 로그인중인지 확인!</h2>
{ this.state.isRun && <p>바나나님 로그인중...</p> }
</div>
)
}
//체크박스에 체크 상태가 변했을 때 호출되는 함수
handleChange = (e)=>{
//이벤트가 일어난 체크박스의 체크 여부를 state에 반영한다.
this.setState({
isRun: e.target.checked
});
}
}
export default App;
- div의 { } 안에다가 출력하기. 100, "kim" 등은 출력된다.
- { } 안에 ()=>{} 함수를 넣으면 출력되는 값이 없다. 무시한다.
- <p>요소를 넣으면? 만들어진다.
- jsx객체가 만들어지면 그 객체를 참고해서 화면 구성이 만들어진다.
const myP= <p>p2입니다.</p>;
- 변수안에 jsx를 갖고 있어도 그냥 원하는 위치에 넣을 수 있다.
- 어떤 값을 출력하거나 출력하지 않으려면? vue에서는 v-if를 썼는데 여기서는 좀 다르다.
- { } 안에서 3항연산자를 이용해서 출력하거나 출력하지 않는 작업도 할 수 있다.
- boolean 값이 들어있는 state를 이용해서 출력하거나 하지 않을 수 있다.
- 체크박스 형태로 수정하기
- 그런데 지금은 state에서 값이 isRun:false로 고정되어 있으므로 체크하려도 해도 되지 않는다.
- 상태값이 안바뀌었기 때문에. setState() 하지 않으면 계속 false인 상태인 것!
- 아래에 체크박스에 이벤트 발생시 호출할 함수를 만들어준다.
- e.target.checked를 하면 체크된 상태를 알아낼수있다.
handleChange = (e)=>{
this.setState({
isRun: e.target.checked
});
}
- setState() 안에 값을 object 타입으로 전달하기 (변수명을 key값으로 사용해서 작성한 것)
- 이제 체크 여부에 따라 아래의 p 요소 값이 달라진다.(동적으로 변화한다)
{ xxx && <p>바나나님 로그인중...</p> }
- 이 경우 xxx 위치에 false가 참조되면 출력하지 않는다.
- 하나의 값을 렌더링할때는 && 으로 작성할 수도 있다.
- 양자택일로 둘 중 하나의 값이 반드시 나와야 할 때는 3항연산자로 표현.
- return의 { } 안에서 3항연산자와 &&를 활용하는 연습!
App04_ex1.js
//App04_ex1.js
import { Component } from "react";
class App extends Component{
state={
weapon: "gun"
}
render(){
return(
<div className="container">
<h3>무엇으로 공격할지 선택하세요</h3>
<select value={this.state.weapon} onChange={this.handleChange}>
<option value="gun">총</option>
<option value="sword">칼</option>
<option value="arrow">활</option>
</select>
<p> <strong>{this.state.weapon}</strong> 으로 공격합니다.</p>
</div>
)
}
handleChange = (e)=>{
//선택된 value 값을 읽어와서 weapon state 값을 변화시킨다.
this.setState({
weapon:e.target.value
})
}
}
export default App;
- state 값이 고정 상태이므로 옵션 중 다른것을 선택해도 바뀌지 않는다.
handleChange = (e)=>{
this.setState({
weapon:e.target.value
})
}
- handleChange 함수에 매개변수 e로 target의 값을 읽어와서 state를 재설정한다.
App04_ex2.js
//App04_ex2.js
import { Component } from "react";
class App extends Component{
render(){
let menu=[
{id:1, name:"김밥"},
{id:2, name:"라면"},
{id:3, name:"떡볶이"},
{id:4, name:"만두"},
{id:5, name:"우동"}
]
const newArray=menu.map((item)=>{
//item은 {id:x, name:x}형태의 object이다.
return <label key={item.id}>{item.name} <input type="checkbox" /></label>;
});
return(
<div className="container">
<h3>먹고싶은 분식 메뉴를 체크하세요.</h3>
{newArray}
</div>
)
}
}
export default App;
- 레이블과 체크박스. 위에있는 menu 를 참고해서 출력하기
- map(()=>{}) : 이 함수는 배열의 갯수만큼 호출된다.
- label에도 키 값을 전달해주기! 경고 창이 나오므로..
- {newArray} 에서 출력한다.
- 만일 이 배열을 상태값으로 관리하고 싶다면?
state={
menus:[]
}
- 이렇게 state에 빈 배열을 넣어서 추가해주면 된다.
'국비교육(22-23)' 카테고리의 다른 글
45일차(2)/React(8) : 모듈화된 CSS 적용하기 / form 요소 활용 (0) | 2022.12.11 |
---|---|
45일차(1)/React(7) : React 실습예제 / CSS import해서 적용하기 (0) | 2022.12.09 |
44일차(1)/React(5) : React 저장소 clone하기 / React 코드 리뷰 (0) | 2022.12.08 |
43일차(3)/React(4) : filter 함수 / 자식 component 활용 예제 (1) | 2022.12.08 |
43일차(2)/React(3) : map, concat 함수 / 이벤트 처리 예제 (0) | 2022.12.08 |