-
react기초 - 노마더코더 ( 영화 웹 서비스 만들기 )ReactJS 2022. 3. 11. 11:52
화살표 함수
function a(){ return(); } // 두 개의 의미는 같다! const b = () => ( );
- react는 UI에서 바뀐부분만 업데이트 해줌
기존의 바닐라같은 경우는 해당태크 및 body태그가 함께 업데이트됨.
- State : 기본적으로 데이터가 저장되는 곳
- React.useState
let a = 0; function ab() { } // 같음 const [a,ab] = React.useState(0); // 배열로 [0,f] 로 들어가있음
- 데이터가 바뀔때마다 컴포넌트를 리렌더링하고 UI를 refresh한다.
- state 변경방식
1. 직접 할당 : setState(state+1)
- 현재 state랑 관련이 없는 값을 새로운 state로 하고 싶은 경우
2. 함수 할당 : setState(state => state+1) ( 함수의 첫번쨰 인자는 현재 state이다 )
- 현재 state에 조금의 변화를 주어서 새로운 state를 주고 싶은 경우
- html
label : input옆에 써주는 글씨 / 클릭시 input 선택 / for속성을 input의 id값과 같게해서 연결
- js와 jsx
js : class , for
jsx : className, htmlFor
- onChange : 데이터를 업데이트 / 이벤트를 리스닝
const [minutes, setMinutes] = React.useState(); const onChange = (event) => { setMinutes(event.target.value); } <input value={minutes} onChange = {onChange} ></input>
- input의 disabled 속성 : 쓰기 불가능 속성
상태변경코드 enable <-> disabled
const [amount, setAmount] = React.useState(0); const [flipped, setFlipped] = React.useState(false); cont onFlip = () => { reset(); // () => setAmount(0); setFlipped((current) => !current); }; <input value={flipped ? amount*60 : amount} disabled = {flipped === true} ></input> <input value={flipped ? amount : Math.round(amount/60)} disabled = {flipped === false} ></input> <button onClick={onFlip}>flip{flipped? "Turn back" : "Invert"}</button>
- select 태그 활용
const [index, setIndex] = React.useState(0); const onSelect = (event) => { setIndex(event.target.value); }; return( <select value={index} onChange={onSelect}> <option value="0"></option> <option value="1"></option> {index === "0" ? <MinutesToHours /> : null} {index === "1" ? <KmToMiles /> : null} </select> }
- component : jsx를 반환하는 함수
- props
함수형컴포넌트에서 매개인자로 받으면 된다. -> function a(props) {}
props는 오브젝트
함수도 보낼 수 있음 -> 하지만 하위컴포넌트 오브젝트로 받아서 실행시켜줘야함
- shortcut
property를 오브젝트로부터 꺼냄
// 1.props function(props){ {props.banna} } // 2.shortcut function({banna}){ {banna} }
- PropType : 어떤 타입의 prop을 받고 있는지를 체크
import ProTypes from "prop-types"; Btn.propTypes = { text: PropTypes.string, fontSize:PropTypes.number.isRequired }
.isRequired : 필수 props속성
// 설치 npm i prop-types
- module.css
create-react-app은 css코드를 javascript 오브젝트로 변환가능
import styles from "./Button.module.css"; <button className={styles.btn}></button>
실행하면 무작위적인 랜덤 class를 갖는다.
style들도 modular(모듈러)가 될 수 있다!
다른 클래스 이름들을 사용하기 위해 기억하고 있어야만 하는 것보다 좋음 / 즉 같은 클래스을 붙여도 다른 css적용가능
- form
<form onSubmit = { (event) => { event.preventDefault(); if(toDo === ""){ return ; } setToDo(""); } ></form>
- array state
const [toDos, setToDos] = useState([]); setToDos(currentArray => [toDo, ...currentArray]) // ...array : 배열자체를 저장하지않고 배열의 요소들만 넣어준다.
- map : 내가 return한 어떠한 값은 새로운 array에 들어감
리스트 출력시 사용
['there','are'].map(()=>":)") // 2개의 :) 출력
map은 함수의 첫번째 argument로 현재의 item을 가져올 수 있다.
<ul> {toDos.map((item, index) => ( <li key={index}>{itme}</li> ))} </ul>
- fetch(url) : url로부터 response를 받아옴
useEffect(() => { fetch(url).then(response => response.json(); ).then(json => console.log(json)); },[]);
- then 대신 async-await 사용
const getMoives = async() => { const response = await fetch(url); const json = await response.json(); setMoives(json.data.movies); }; const getMoives = async() => { const json = await( await fetch(url) ).json(); }
-route
Hash Router : url에 #이 붙음
Browser Router : 우리가 일반적으로 생각하는 url
Switch : Route(url) 를 찾음. 한번에 하나의 Route만 랜더링하기 위해서
<Router> <Switch> <Route path="/"> <Home /> </Route> </Switch> </Router>
Link : 브라우저 새로고침 없어도 유저를 다른 페이지로 이동시켜주는 컴포넌트
- 동적 url 방식 ( get방식 )
// 1. 전송 방식 <Route path="/movie/:id"> <Link to={`/movie/${id}`}> // 2. 사용 방식 const {id} = useParams();
'ReactJS' 카테고리의 다른 글
react기초 - 노마더코더 ( 트위터 클론코딩 ) (0) 2022.03.13 react기초 - 노마더코더 ( 영화 웹 서비스 만들기 ) - hook (0) 2022.03.12 react기초4 - CRUD(Update , Delete 편) (0) 2022.03.08 react기초3 - CRUD(Create 편) (0) 2022.03.07 react기초2 (0) 2022.03.07