<input>에 입력된 값 가져오기
// 이벤트 핸들러 부착 후, 현재 입력된 값 출력하기
<input onChange={(e)=>{ console.log(e.target.value) }}/>
- 주로 변수 명은 e로 사용함
- e.target : 현재 이벤트가 발생한 곳 알려줌
- e.preventDefault() : 이벤트 기본 동작 막아주기
- e.stopPropagation() : 이벤트 버블링 막아주기 (이벤트가 상위 div로 퍼지는 현상)
사용자가 input에 입력한 데이터 저장하기
- state 하나 생성해주고
- 이벤트가 발생할 때마다 e.target.value를 state에 갱신
function App (){
let [입력값, 입력값변경] = useState('');
return (
<input onChange={(e)=>{
입력값변경(e.target.value)
console.log(입력값)
}} />
)
}
실습 요구사항
- 버튼을 누르면 유저가 입력한 글을 글 목록에 추가
- 글마다 삭제버튼 + 기능 구현
- 내용이 없는 글은 발행하지 않도록
- 글을 하나 추가하면 좋아요 state도 그에 맞게 수정
- 날짜 데이터 추가하기
/* eslint-disable */
import { useState } from 'react';
import './App.css';
function App() {
let [titles, setTitles] = useState(['크로스핏 컴백한 날', '운동하는데 첫 눈 왔당', '서울 가야하는 이유 + 1']);
// 버튼 클릭시 좋아요 +1 => 자주 변경될 것이기 때문에 state 사용
let [likes, setLikes] = useState([0, 0, 0]);
// 날짜 정보
let today = new Date();
let month = today.getMonth() + 1;
let date = today.getDate();
// UI의 현재 상태
let [modal, setModal] = useState(false);
let [title, setTitle] = useState(0);
function updateTitle1() {
let copy = [...titles];
copy[0] = '제목 변경 완.';
setTitles(copy);
}
let [inputData, setInputData] = useState('');
return (
<div className="App">
(...생략)
{
// i는 0부터 1씩 증가하는 수
titles.map((title, i)=>{
return (
<div className="list" key={i}>
(...생략)
{/* 5. 날짜 데이터 반영해주기 */}
<p>{ month }월 { date }일 작성됨</p>
{/* 2. 삭제 버튼과 기능 구현 */}
<button onClick={()=>{
let copy = [...titles]
copy.splice(i, 1)
setTitles(copy)
}}>delete</button>
</div>
)
})
}
<input onChange={(e)=>{
setInputData(e.target.value)}}>
</input>
<button onClick={()=>{
// 3. 빈 문자열일때는 발행하지 못하도록 alert
if (inputData === '') {
alert('내용을 입력해 주세요!')
return
}
// 4. 좋아요 숫자 처리해주기
let likes_copy = [...likes];
likes_copy.unshift(0)
setLikes(likes_copy)
// 1. 제목 추가해주기
let copy = [...titles]
copy.unshift(inputData)
setTitles(copy)
}}>등록</button>
</div>
);
}
export default App;
실행 결과)
뷰 하다가 리액트,, 좀 eeeeeez하네 ㅎ 리액트가 약간 더 까다로운 느낌이 있다!
JS 공부 깊게 할 필요가 있는듯,,ㅎ
'Web > React' 카테고리의 다른 글
[React] Lifecycle (0) | 2022.12.15 |
---|---|
[React] - Router 1 (0) | 2022.12.13 |
[React] 블로그 제작 3 - map, props (0) | 2022.12.07 |
[React] 블로그 제작 2 - 동적인 UI, 삼항연산자 (0) | 2022.12.07 |
[React] 블로그 제작 1 - onClick, state 변경, Component (0) | 2022.12.01 |
댓글