Hook은 함수 컴포넌트에서 React state와 생명주기 기능(lifecycle features)을 "연동(hook into)" 할 수 있게 해주는 함수입니다. - React 공식 문서 -
useState
같은 내장 Hook을 몇 가지 제공합니다.• 규칙 1: 최상위(at the top level)에서만 Hook을 호출해야 합니다. 그리고 반복문, 조건문, 중첩된 함수 내에서 Hook을 실행하지 마세요.
• 규칙 2 : React 함수 컴포넌트** 내에서만 Hook을 호출해야 합니다. 일반 JavaScript 함수에서는 Hook을 호출해서는 안 됩니다.
import React, { useState } from 'react';
function State() {
const [color, setColor] = useState('red');
return (
<div>
<h1>Function Component | State</h1>
</div>
);
}
export default State;
return
문 안에 들어있습니다.useState
함수를 import 한 후 사용해야 합니다.useState
함수는 컴포넌트 선언문(function State()
)과 return
문 사이에 작성합니다.useState
함수에 초기값('red')을 인자로 넣어 호출하면 배열을 반환합니다.color
로, color의 값을 갱신하는 함수를 setColor
로 그리고 color의 초기값을 red
로 정의했습니다.import React, { useState } from 'react';
function State() {
const [color, setColor] = useState('red');
return (
<div>
<h1 style={{ color: color }}>Function Component | State</h1>
<button onClick={() => setColor('blue')}>Click</button>
</div>
);
}
export default State;
<h1>
태그 아래에 <button>
요소를 추가해주었습니다.<button>
요소에서 onClick
이벤트 발생setColor
함수 실행<h1>
태그 글자 색상 변경useState
함수는 컴포넌트 선언문(function State()
)과 return
문 사이에 작성한다.
const [state, setState] = useState(initialValue)
useState
함수를 import 한 후 사용해야 한다.useState
함수에 초기값('red')을 인자로 넣어 호출하면 배열을 반환합니다.color
로, color의 값을 갱신하는 함수를 setColor
로 그리고 color의 초기값을 red
로 정의button
을 클릭하면 onClick
이벤트 발생setColor
함수 실행setColor
함수를 실행시키면서 인자로 넘겨준 값 'blue'에 의해 color의 값이 'red' 에서 'blue'로 변경<h1>
태그 글자 색상 변경위의 코드 처럼 color를 바꿔주는 titleColor
와 input
의 onChange
이벤트 handleChange
함수로 인해 input
에 아무 값도 입력되지 않으면 false 값인 blue 색이 나오며 id.lenght > 5
조건으로 인해 5글자 이상이면 true 가 되어 기본 값인 red 색상으로 변경 된다.
//Parent.js
const Parent = () => {
const [isToggled. setIsToggled] = useState(false);
const handleClick = () => {
if (isToggled === true) {
setIsToggled(false);
} else {
setIsToggled(true);
}
};
Parent.js
에서는 위와 같이 입력한다.
//Child.js
function Child({ isToggled, changeColor }) {
return (
<>
<h1 style={{ color: isToggled ? "red" : "blue" }}>여기는 타이틀!!</h1>
<button onClick={changeColor}>change color</button>
</>
);
}
Child.js
에서는 위와같이 입력하고 h1 tag
에서는 style
속성을 삼항연산자로 이용하여 red, blue 값을 boolean
값으로 넣어준다.
Parent.js
의 if문
을 줄일 수 있으며 줄이는 방법은 다음과 같다.
const handleClick = () => {
if (isToggled) {
setIsToggled(false);
} else {
setIsToggled(true);
}
};
isToggled
자체도 boolean 값이기 때문에 위처럼 줄일 수 있고 if문을 간단하게 삼항연산자를 사용하여 줄일 수 도 있다.
const handleClick = () => {
setIsToggled(isToggled ? false : true);
};
위의 삼항연산자는 boolean의 결과이기 때문에 isToggled
의 값이 아니라면의 조건으로 앞에 !
를 사용해주면 더 짧게 줄일 수 있다.
const handleClick = () => {
setIsToggled(!isToggled);
};
위의 예시처럼 Parent.js
안에 Title.js
, Button.js
가 있는데Title.js
와 Button.js
가 서로 영향을 끼치게 하려면 부모 컴포넌트인 Parent.js
에 state
를 사용하여 이벤트를 적용 시킬 수 있다.
Parent
컴포넌트 안에 name, age, isMale
을 지정해준다.Child
컴포넌트에 props
값을 넣어주어 적용 할 수 있도록 실습을 했다.sayHello
함수를 선언하여 안녕하세요
alert
을 첫번째 Child
의 컴포넌트에만 선언해주었다.Child
컴포넌트에 props사용을 {props.name}
, {props.age}
... 이런 식으로 작성 가능하다.
구조화할당을 통해 아래 처럼 선언하고 실제 return
되는 속성에는 {props.name}
이 아닌 {name}
만 입력하는 방법도 있다.
const {name, age, isMale, sayHello } = props;
참고 및 출처
위코드 강의