반응형
(React) 리액트: 리스트 작성 프로젝트 만들기(간단함)
*이 포스팅은 개인적으로 리액트를 복습하기 위해 작성한 포스팅입니다.
포스팅 요약
1. 기능설명 및 실행 화면
2. 이벤트 핸들링에 대한 간단 설명
3. useRef에 대한 간단 설명
4. useState에 대한 간단 설명
5. 간단한 리스트 작성 기능 구현하기 (css X)
1. 기능설명 및 실행 화면
기능:
1. 입력: input태그에 문자 입력 후, 확인버튼 클릭 or 엔터 시, 입력된 문자 출력
2. 삭제: 삭제를 원하는 요소 더블클릭시 삭제
3. 수정: input태그에 문자 입력 후, 대체하고 싶은 요소 클릭시, 수정됨.
<사진>
<실행 영상>
2. 이벤트 핸들링에 대한 간단 설명
리액트에는 HTML과 같은 이벤트들이 있습니다. ex) onClick, onmouseover... 등
다른점은 리액트에서는 카멜 표기법을 따라야 된다는 점입니다.
HTML | React |
onclick, onmouseover, onchange ... | onClick, onMouseOver, onChange ... |
3. useRef에 대한 간단 설명
ref는 원하는 요소에 직접 접근할 수 있게 해줍니다.
예를들어
<input ref={inputName} />
input요소에 "inputName"으로 ref를 달아 주면, 다른 요소에서도 inputName으로 input에 접근할 수 있게됩니다.
(* 아래 프로젝트에서 사용한걸 보시면 이해가 가실겁니다.
* inputName말고 다른 이름을 써도 됩니다.)
*아래코드는 이해를 돕기위해 프로젝트에서 useRef를 쓴 부분만 따온겁니다.
const inputName = useRef(null); //초기화
const modify = (id) => {
lists.map((list) => {
if (list.id === id) {
//input태그에 직접 접근하여 커서 포커스 설정
inputName.current.focus();
//input태그에 직접 접근하여 input의 value값 가져오기
list.text = inputName.current.value;
}
});
setLists(lists);
setInput('');
};
<input
name="list"
type="text"
placeholder="추가할 문장을 써주세요."
value={input}
onChange={onChange}
ref={inputName} //inputName이라는 이름으로 ref를 달아줌
/>
4. useState에 대한 간단 설명
useState는 상태를 바꿀때 사용합니다.
*간단한 예제
import React, { useState } from 'react';
//useState import해오기
const UseState = () => {
//처음 Input의 값을 ''으로 초기화
const [text, setText] = useState('');
//onChange는 input에 값이 업데이트 될 시 실행되는 이벤트
const onChange = (e) => {
//input에 글씨를 칠 때마다, text에 value값을 넣어줌
setInput(e.target.value);
};
return (
<div>
<input type="text" onChange={onChange} value={text} />
</div>
);
};
export default UseState;
5. 간단한 리스트 작성 기능 구현하기 (css X)
App.js
import React from 'react';
import ListComponent from './ListComponent';
const App = () => {
return <ListComponent />;
};
export default App;
ListComponent.js
import React, { useState, useRef } from 'react';
const ListComponent = () => {
/* userState사용전 초기화 */
const [input, setInput] = useState('');
const [lists, setLists] = useState([]);
const [nextId, setNextId] = useState(0);
const inputName = useRef(null);
/* 이벤트들 */
/* input값에 문자 입력할 때 마다 실행 되는 이벤트 함수*/
const onChange = (e) => {
setInput(e.target.value);
};
/* enter or 확인 버튼 클릭 시 발생하는 이벤트 함수*/
const submit = (e) => {
e.preventDefault(); //새로고침 방지
const about_lists = lists.concat({ //원래 있는 리스트에 붙여주기
id: nextId,
text: input,
});
setNextId(nextId + 1); //id값 +1
/*방금 붙여준 리스트까지 포함 된 리스트로 세팅하기*/
setLists(about_lists);
setInput(''); //input 태그안에 있는 문자 지워주기
};
/* 리스트들 화면에 띄우기 위해 map으로 반복 요소 불러오기 */
const input_list = lists.map((list) => (
<li
/*고유 key값 주기*/
key={list.id}
/*더블클릭시 삭제할 이벤트*/
onDoubleClick={() => removeList(list.id)}
/*클릭시 요소가 수정되는 이벤트*/
onClick={() => modify(list.id)}
>
{list.text}
</li>
));
//삭제 이벤트 함수
const removeList = (id) => {
const about_lists = lists.filter((list) => list.id !== id);
setLists(about_lists);
};
//수정 이벤트 함수
const modify = (id) => {
lists.map((list) => {
if (list.id === id) {
inputName.current.focus();
list.text = inputName.current.value;
}
});
setLists(lists);
setInput('');
};
return (
<div>
<form onSubmit={submit}>
<input
name="list"
type="text"
placeholder="추가할 문장을 써주세요."
value={input}
onChange={onChange}
ref={inputName}
/>
<button type="submit">확인</button>
</form>
<hr />
<ul>{input_list}</ul>
</div>
);
};
export default ListComponent;
역시 직접 기능 구현을 해봐야지 어떻게 쓰이는지 알 것 같네요 ㅠㅠ
반응형
'웹 > (React)리액트' 카테고리의 다른 글
(React) useReducer 사용법 / useReducer와 이벤트 함께 사용하기 (0) | 2021.08.24 |
---|---|
(React) 리액트 useEffect 사용법 (0) | 2021.08.23 |
(React) 리액트 useState 사용해서 계산기 프로그램 만들기 (0) | 2021.08.20 |
(React) 리액트 state를 사용한 더하기 프로그램 만들기(초간단) (0) | 2021.08.18 |
(React) 리액트 props, 컴포넌트에게 값 전달하기 (0) | 2021.08.18 |
댓글