React에서는 var, let등을 사용하여 값을 저장해도 되지만 state 라는 방법을 사용하여 값을 저장할 수 있다.
state 를 사용하는 이유는 일반 변수와 달리 값이 변경되면 자동으로 변경된 데이터가 설정된 HTML을 렌더링 해준다
즉, 일반 변수의 변경된 값이 적용된 사이트를 보기 위해서는 새로고침이 필요했지만 state를 사용하면 그럴 필요가 없다.
따라서 state 방식을 사용한 값 저장은 자주 변경되는 데이터를 저장할 때 사용한다.
useState 함수의 인자로 (실제 저장할 데이터, 해당 데이터 변경 함수)
(Header.jsx)
import { useState } from "react"
export default function Header(){
let [title, setTitle] = useState('Header Page')
return(
<div>{title}</div>
)
}
state 값은 직접 변경이 불가능하며, 반드시 변경을 시킬 수 있는 함수를 사용하여 데이터를 변경해야한다.
(Header.jsx)
import { useState } from "react"
export default function Header(){
let [title, setTitle] = useState('Header Page')
return(
<button onClick={()=>{setTitle('Change Page')}}>{title}</button>
)
}
만약 배열이 state에 설정되어 있을 때 수정 방법
(Header.jsx)
import { useState } from "react"
function Header(){
function ChangePage(){
var newArray = [...title];
newArray[0] = 'ChangePage';
setTitle(newArray)
}
let [title, setTitle] = useState(['HeaderPage'])
return(
<button onClick={ChangePage}>{title}</button>
)
}
export default Header
function Header(){
...
return(
<>
<button onClick={ChangePage}>{title}</button>
<SubPage></SubPage>
</>
)
}
function SubPage(){
return (
<>
<div> Sub Page!</div>
</>
)
}
...
}
React는 직접적인 if-else 구문을 사용할 수 없고 삼항연사자 를 사용해야 한다.
조건문 ? 조건이 참 일때 실행 코드 : 조건이 거짓일 때 실행 코드
import { useState } from "react"
function BtnToggle(){
let [toggle, setToggle] = useState()
return(
<>
<button onClick={()=> {setToggle(!toggle)}}>Change Btn</button>
{
toggle ? <SubPage></SubPage> : null
}
</>
)
}
function SubPage(){
return (
<>
<div> Sub Page!</div>
</>
)
}
export default BtnToggle
React는 for 구문을 사용할 수 없고 map을 사용하거나 함수를 정의하여 사용해야한다.
배열.map((요소,인덱스)=> { return 요소})
import { useState } from "react"
function Title(){
let [list, setList] = useState(['Title1','Title2','Title3'])
return (
<>
{
list.map(function(a,i){
return(
<div>{list[i]}</div>
)
})
}
</>
)
}
export default Title
import { useState } from "react"
function Title(){
let [list, setList] = useState(['Title1','Title2','Title3'])
function Show(){
var showArray = []
for (let i=0; i<3; i++){
showArray.push(
<div>{list[i]}</div>
)
}
return showArray
}
return (
<div>
{Show()}
</div>
)
}
export default Title
<img src={'https://hjc/img/test' + (props.i+1) + '.jpg'}/>