💭 React.Fragment가 필요할 때!?
// input을 이용한 예시코드
import React from 'react'
import { useRef } from 'react';
import { useState } from 'react'
export default function TestRef() {
const[text, setText] = useState("안녕하세요");
const inputValue = useRef();
function onChangeText() {
setText(inputValue.current.value);
}
return (
<div>
<h1>{text}</h1>
<input
ref={inputValue}
onChange={() => { onChangeText(); }} />
</div>
)
}
import React, { useRef } from 'react'
export default function ChangeFocus() {
const input1 = useRef();
const input2 = useRef();
const ChangeFocusOne = () => {
input1.current.focus();
}
const ChangeFocusTwo = () => {
input2.current.focus();
}
//기능요소 만들기(changeFocusOne과 Two), current는 DOM요소까지 접근
return (
<div>
<input ref={input1} />
<input ref={input2} />
<br/>
<button onClick={ChangeFocusOne}>1번</button>
<button onClick={ChangeFocusTwo}>2번</button>
</div>
)
}
useEffect(()⇒ { //작업} );
useEffect(()⇒{//작업}, [value]); 화면에 첫 렌더링 될때 실행, value값이 바뀔 때 실행
**UseEffect (랜더링 될 때마다 매번 실행됨)
useEffect 는 인자로 콜백함수를 꼭 받는다. (()⇒{작업}} 와 같은 형태를 가진다.
→ 무거운 작업을 할 경우 매번 업데이트 때마다 실행되면 과중해질 수 있으니, 하나의 요소만 업뎃될 시 렌더링 되도록 할 수 있다. 위 [value] 를 값을 적어주면된다.
// 마운트 될 때마다 실행됨
useEffect (() => {
console.log('🥰 랜더링되었습니다');
});
// 마운트 + 카운트 변화될 때마다 실행됨
useEffect (() => {
console.log('😇 카운트');
}, [count]);
// 마운트 + 네임 변화될 때마다 실행됨
useEffect (() => {
console.log('🥸 네임');
}, [name]);
// 마운트 맨 처음 딱 실행될 때만 딱 한번 랜더링([]에서 배열에 빈값)
useEffect (() => {
console.log('🤗 맨 처음에만');
}, []);
보통 컴포넌트가 서버로부터 데이터를 받아와야하는 상황에서 많이 사용한다.
export default function () {
const [showTimer, setShowTimer] = useState(false);
// 초기값은 false로 초기엔 실행하지않겠다는 의미.
const Timer = (props) => {
useEffect( () => {
const timer = setInterval(()=>{
console.log('타이머돌아가는중..');
}, 1000);
return () => {
clearInterval(timer);
console.log('타이머가 종료되었습니다');
};
},[]);
}
// 리턴값으로 클린값을 받았다 !
return (
<div>
{showTimer && <Timer />}
<button onClick={()=> setShowTimer(!showTimer)}>Toggle Timer</button>
</div>
)
}