-
[React] input data 추가하기 & 글 삭제 버튼공부/React 2024. 2. 6. 18:40
출처 : 코딩애플 React 강의 과제
1. 유저가 입력한 데이터 추가, 글 삭제버튼
(응용 1. 빈 입력값 체크 / 응용 2. 좋아요 추가 / 응용3. 날짜 추가)
- e.target으로 받은 유저의 입력값을 in_data에 담아 useState(spread를 사용하여)로 logo 데이터에 추가시켰다.
- 삼항연산자를 이용해 유저 입력값(in_data)이 공백이 아닌 경우에만 실행되도록 했다.
- useState를 이용해 새로 만들어진 글에 좋아요 데이터를 하나 더 추가했다.
- 현재 날짜는 date함수를 통해 가져와서 발행일자에 입력했다.
- 삭제 버튼의 경우는 splice()함수를 통해 구현했다.
2. 작성한 코드
function App() { //데이터변수 let [logo,setLogo] = useState(["오늘의 추천음식","강남운동맛집","강남핫플레이스","여자코트추천"]); //좋아요변수 let [like_count,setlike] = useState([0,0,0,0]); //저장용 변수 let [in_data,setinput] = useState(''); //타이틀 let [title, setitle] = useState(0); //현재날짜 const today = new Date(); const formattedDate = `${today.getFullYear()}년 ${today.getMonth() + 1}월 ${today.getDate()}일`; function title_ch(i){ setitle(i); } //좋아요 기능 함수 function test(i){ let n_count = [...like_count]; n_count[i] = (n_count[i]+1); setlike(n_count); } //타이틀 삭제버튼 function title_del(i){ let del_data = [...logo]; del_data.splice(i,1); setLogo(del_data); } return ( <div> { logo.map(function(a,i){ return ( <div className='list' key={i}> <h4 onClick={()=>title_ch(i)}>{ a } <span onClick={(e)=>e.stopPropagation(test(i))}>👍</span> {like_count[i]} </h4> <p>{formattedDate} 발행</p> <button className='iam_delbtn' onClick={()=>{title_del(i)}}> 삭제버튼 </button> </div> ) }) } { <div> <input onChange={(e)=>{setinput(e.target.value);}}></input> <button onClick={()=>{ in_data != '' && setLogo([...logo,in_data]); setlike([...like_count,0]);}}>input버튼</button> </div> } </div> ); } export default App;
3. 기타 팁 (정리)
- input 데이터 추가 문제는 unshift() 또는 concat 이용해도 해결 가능하다.
예 : concat , unshift
/*concat*/ <button onClick={()=>{setLogo(logo.concat(in_data));}}> input버튼 </button> /*unshift*/ <button onClick={()=>{ let copy = [...logo]; copy.unshift(in_data); setLogo(copy); }}> 발행버튼 </button>
- unshift() : 배열의 맨 앞에 하나 이상의 요소를 추가하는 메서드
- splice() : 배열에서 요소를 삭제하고 새로운 요소를 추가
예 : splice()
button onClick={()=>{ let del_title = [...logo]; del_title.splice(i,1); setLogo(del_title); }}>삭제</button>
- Spread : es6에 추가된 문법 ...을 사용해 배열의 값을 받고 확장시킬 수 있는 문법
- concat() : 기존 배열과 다른 배열의 값을 결합해 새로운 배열을 반환하는 메서드
'공부 > React' 카테고리의 다른 글
[React] React에서 Ajax & Ajax 사용법 (0) 2024.02.16 [React] 리액트로 페이지 나누기 (React-Router-Dom) (1) 2024.02.14 [React] 날짜 데이터 사용하기 (0) 2024.02.06 [React] 버튼 클릭 이벤트로 버튼을 구분해서 값 변경하기 (0) 2024.02.04 [React] useState 함수 (0) 2024.01.31