목차
useState
import React, { useState } from 'react'
export default function Ex01() {
const [su,setSu]=useState(1111);
const [obj,setObj]=useState({key1:'val1',su2:2222});
return (
<>
<h2>state</h2>
<div>su:{su}</div>
<div>{obj.key1}:{obj.su2}</div>
<button onClick={e=>{
setSu(su+1);
const obj2={...obj,su2:obj.su2+1};
setObj(obj2);
}}>click</button>
</>
)
}
useEffect
import React, { useEffect, useState } from 'react'
export default function Ex01() {
const [su,setSu]=useState(1111);
const [obj,setObj]=useState({key1:'val1',su2:2222});
useEffect(()=>{
console.log('effect taken on:',su);
setTimeout(()=>setSu(su+1),1000);
},[su]);
return (
<>
<h2>state</h2>
<div>su:{su}</div>
<div>{obj.key1}:{obj.su2}</div>
<button onClick={e=>{
setSu(su+1);
}}>click1</button>
<button onClick={e=>{
const obj2={...obj,su2:obj.su2+1};
setObj(obj2);
}}>click2</button>
</>
)
}
useRef
import React, { useRef, useState } from 'react'
function Ex02() {
const [input1,setInput1]=useState('');
const input2=useRef();
return (
<div>
<input ref={input2} onChange={e=>{setInput1(e.target.value);}} value={input1}/>
<button onClick={e=>{console.log(input2.current.value);}}>클릭</button>
</div>
)
}
export default Ex02
memo()
import React, { memo, useEffect } from 'react'
function Ex04({obj}) {
useEffect(()=>{
console.log('ex04 rendering...'); // 로딩할때만 Ex04의 렌더링이 이루어진다.
})
return (
<div>su2:{obj.su2}</div>
)
}
export default memo(Ex04); // 변화가 없을때는 렌더링을 하지 않는다.
import React, { useState } from 'react'
import Ex04 from './Ex04';
function Ex03() {
const [su1,setSu1]=useState(1111);
const [obj,setObj]=useState({su2:2222});
return (
<div>
<div>su1:{su1}</div>
<Ex04 obj={obj}/>
<button onClick={e=>{
setSu1(su1+1);
}
}>click1</button>
<button onClick={e=>{
setObj({...obj,su2:obj.su2+1});
}
}>click2</button>
</div>
)
}
export default Ex03
useCallback
import React, { memo, useEffect } from 'react'
function Ex06({todos,addTodo}) {
useEffect(()=>{
console.log('ex06 rendering...');
});
return (
<>
<h2>My Todos</h2>
{todos.map((todo, index) => {
return <p key={index}>{todo}</p>;
})}
<button onClick={addTodo}>Add Todo</button>
</>
);
}
export default memo(Ex06);
import React, { useCallback, useState } from 'react'
import Ex06 from './Ex06';
function Ex05() {
const [count, setCount] = useState(0);
const [todos, setTodos] = useState([]);
const increment = () => {
setCount((c) => c + 1);
};
const addTodo = useCallback(() => {
setTodos((t) => [...t, "New Todo"]);
},[todos]);
return (
<>
<Ex06 todos={todos} addTodo={addTodo} />
<hr />
<div>
Count: {count}
<button onClick={increment}>+</button>
</div>
</>
);
}
export default Ex05
useMemo
custom Hooks
import React from 'react'
export default ()=>{
return (
<div>Ex07</div>
)
}
const Ex07=()=>{
return (
<div>Ex07</div>
)
}
export default Ex07
useReducer
import React, { useReducer, useState } from 'react'
let init={su:10};
const PLUS='plus',MINUS='minus',PLUSPLUS='plusplus';
const suReducer=(state,action)=>{
console.log(state,action);
switch(action.type){
case PLUS:
return {...state,su:state.su+1};
case MINUS:
return {...state,su:state.su-1};
case PLUSPLUS:
return {...state,su:state.su+action.value};
default:
return state;
}
};
function Ex08() {
// const [su,setSu]=useState(0);
const [obj,dispatch]=useReducer(suReducer,init);
return (
<div>
<h2>su:{obj.su}</h2>
<button onClick={e=>dispatch({type:'plus'})}>plus</button>
<button onClick={e=>dispatch({type:'plusplus',value:10})}>plus+10</button>
<button onClick={e=>dispatch({type:'minus'})}>minus</button>
</div>
)
}
export default Ex08
useContext
'100일 챌린지 > 빅데이터기반 인공지능 융합 서비스 개발자' 카테고리의 다른 글
Day 81 - React에서 login 프로그램 만들기 (4) Spring backend 활용하기 + Oauth (0) | 2024.11.22 |
---|---|
Day 79 - React로 CRUD 프로그램 만들기 (3) Nodejs API 서비스 이용 (0) | 2024.11.20 |
Day 78 - React로 CRUD 프로그램 만들기 (2) spring에서 데이터셋 활용하기 [h2] (1) | 2024.11.19 |
Day 78 - React 프로그램 배포하기 (3) | 2024.11.19 |
Day 78 - React로 CRUD 프로그램 만들기 (1) dummy json 사용 (0) | 2024.11.19 |