※ 주의사항
use~ (리액트 훅)를 사용할 때는 특정 함수 안에 선언문이 들어있으면 안된다.


→ 위에서 아래로 - 단방향 데이터 흐름(one-way reactive data flow)
Q. 단방향으로 데이터를 관리 할 때 장점?


→ 자식요소에서 부모요소로 데이터를 바로 전달 할 수 없다.



Context 란?
리액트 컴포넌트 간에 값을 전역적으로 공유할 수 있게 해주는 기능
우리에게는 데이터를 주고받는 props가 있는데 왜 context를 써야하는가?
A. props로만 데이터를 전달하면 깊숙하게 위치한 컴포넌트에 데이터를 전달하는 경우
여러번 연달아서 props를 설정하게 됨 => 불편하고, 실수가 잦음
이러한 현상을 props drilling 이라고 부른다.
그래서 우리는 context로 전역적으로 데이터를 관리한다.
[Context 만드는 순서]
1) context 파일을 만들어준다.
2) context를 사용할 공간에 import {context} 해주기!
3) context Provider로 감싸주기
화면 단에서 바로 반응하는 변할 수 있는 수?
→ state
여러 개의 태그를 나만의 조합으로 묶어주는
→ component
** 대문자로 반드시 시작할 것
useRef - 내가 어떤 특정 요소에 접근하고 싶을 때
하위 → 상위 컴포넌트로 데이터 전송 X
function을 통해 데이터를 주고 받았음!
import React, {useRef} from 'react'
import './App.css';
const Ex07 = () => {
/**
주의사항!
use~ (리액트 훅)를 사용할 때는
특정 함수 안에 선언문이 들어있으면 안된다
*/
const divRef = useRef();
/** 원하는 값으로 사이즈를 변경시켜주는 함수 */
const changeSize = (size) => {
console.log('divRef', divRef.current)
divRef.current.style.width = size + "px";
divRef.current.style.height = size + "px";
};
const ckBtn = (e) => {
console.log('ck', e.target.innerText);
if(e.target.innerText === "작게") {
changeSize(100)
}else if(e.target.innerText === "크게") {
changeSize(300)
}else {
changeSize(200)
}
};
return (
<div>
<button onClick={ckBtn}>작게</button>
<button onClick={ckBtn}>원본</button>
<button onClick={ckBtn}>크게</button>
<div className='square' ref={divRef}/>
</div>
)
}
export default Ex07
.square {
background-color: pink;
width: 200px;
height: 200px;
margin: 2%;
}



import React, {useEffect, useRef} from 'react'
const Ex08 = () => {
const iframeSrc = useRef();
const inputText = useRef();
useEffect(()=>{
inputText.current.focus();
},[])
const changePdf = (name)=>{
iframeSrc.current.src = `pdf/pdfFile${name}.pdf`
}
const ckBtn = () => {
console.log('inputText', inputText.current.value)
if(inputText.current.value === "첫번째"){
changePdf("1");
}else{
changePdf("2");
}
};
return (
<div>
<input type='text' ref={inputText}/>
<button onClick={ckBtn}>pdf 변경</button>
<iframe
width="100%"
height="90%"
ref={iframeSrc}>
</iframe>
</div>
)
}
export default Ex08


