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;
참고 및 출처
위코드 강의