리액트,자바스크립트

React Hooks -1

JUN0126 2020. 6. 5. 17:31

React Hooks란?

 - function(함수)형 컴포넌트에서 사용할 수 없었던 라이프 사이클 및 state 형태를 사용하게 해주는 JS 라이브러리

 

1. useState

 - 함수형 컴포넌트에 state를 추가할 수 있다

 - 선언된 state는 컴포넌트가 다시 렌더링 되어도 그대로 유지한다.

• 사용법  

  const [state,setState] = 1. useState('초기값')    // 배열 구조 분해 형식으로 선언

                                 2. useState(() => {const initialState = 함수(props) return initialState })

  setState("state 값을 변경할 값") // class 컴포넌트에서 this.setState 형식과 동일  

  //비동기식으로 선언시 두번째 인자에서 실행할 기능 선언  확인해보라

  //setState("변경값", ()=>실행할기능) this.setState({}, ()=> 실행할 기능)

- 초기값은 첫 번째 렌더링에서 한번 사용됩니다. (constructor 선언과 동일)

- 여러 개의 useState 선언 가능

 

위에는 무슨 말인가 ?

 

2. useEffect

 - 데이터를 가져오거나 DOM을 직접 조작하는 작업 : Side effect

 - 기본적으로 모든 렌더링이 완료된 후에 수행

 - useEffect는 함수 컴포넌트 내에 side Effect를 수행할 수 있게 해 준다.

 - useEffect 사용 시 DOM을 바꾼 뒤 useEffect안에 실행한 'effect' 함수 실행

 • 사용법

  useEffect (() =>{

   실행할 함수 혹은 기능 

    return (()=>{     // 해제할 필요가 있는 기능 구현 시 return에서 선언 ComponentDidUnmount 역할(필수 X)

      해제할 기능

    }

  },[props.인자]) // effect가 종속되어있는 값의 배열, 해당 값이 변할때 useEffec 실행 ComponentDidUpdate, 빈값일때

   렌더링시 한번만 실행됨

 - 여러 개의 useEffect 선언 가능

 

Hooks 규칙

1. 최상위에서만 Hooks 호출 가능, 반복문, 조건문, 중첩된 함수 내에 Hooks 실행 X

2. 함수형 컴포넌트 내에서 만 Hooks가능, 일반 JS함수 내에서 선언 불가능

 

Custom Hooks

생성한 Hooks를 다른 함수형 컴포넌트에서 객체 형식으로 사용할 수 있다.

EX)  ※ 색상 확인

1. function useFriendStatus(friend ID)

{

   const [isOnline,setIsOnline] = useState(null);

   ~~~

   return isOnline

}

 

2. function FriendStatus(props){

    const  isOnline = useFriendStatus(props.friend.id);

    ~~~

    return isOnline ? "Online " : "Offline"

}

 

3. function FriendListItem(props){

   const isOnline = useFriendStatus(props.friend.id);

   ~~~

   return (

     <li style ={{color:inOnline ? "green" :"black"}}>

      {props.friend.name} 

      </li>

    )

}

'리액트,자바스크립트' 카테고리의 다른 글

React-redux.md  (0) 2020.07.05
React 상태관리 (Context, Redux)  (0) 2020.06.16
Axios,Fetch  (0) 2020.03.02
React (Component Life Cycle)  (0) 2020.03.01
React 기초 (Component, Props, State)  (0) 2020.03.01