따라하며 배우는 리액트 A-Z
[프론트엔드, 웹 개발] 강의입니다.
이 강의를 통해 리액트 기초부터 중급까지 배우게 됩니다. 하나의 강의로 개념도 익히고 실습도 하며, 리액트를 위해 필요한 대부분의 지식을 한번에 습득할 수 있도록 만들었습니다.
✍️
이런 걸
배워요!
리액트
NextJS
타입스크립트
정적 사이트 자동 배포
도커
강의: https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%8A%94-%EB%A6%AC%EC%95%A1%ED%8A%B8#
강의 자료 : https://github.com/braverokmc79/DiagramPDF
소스: https://github.dev/braverokmc79/react-todo-app
[3].To-Do 앱 최적화 하기
23.리액트 불변성 지키기
강의:
24.List 컴포넌트 생성하기
강의:
List.js
import React from 'react'; const List = ({ id, completed, title, todoData, setTodoData, provided, snapshot }) => { const handleClick = (id) => { let newTodoData = todoData.filter(data => data.id !== id); setTodoData(newTodoData); } const handleCompleteChange = (id) => { let newTodoData = todoData.map(data => { if (data.id === id) { data.completed = !data.completed; } return data; }); setTodoData(newTodoData); } return ( <div key={id} {...provided.draggableProps} ref={provided.innerRef} {...provided.dragHandleProps} className={snapshot.isDragging ? "selected" : "not-selected"} > <div className={`${snapshot.isDragging ? "bg-gray-100" : "bg-gray-400"} flex items-center justify-between w-full px-4 py-1 my-2 text-gray-600 border rounded`} key={id}> <div> <input type="checkbox" defaultChecked={completed} onChange={() => handleCompleteChange(id)} /> <span className={`${completed ? "line-through" : undefined} px-2`}>{title}</span> </div> <div className='items-center'> <button className='px-4 py-2 float-right' onClick={() => handleClick(id)}>x</button> </div> </div> </div> ); }; export default List;
Lists.js
~ {(provided, snapshot) => ( <List id={data.id} completed={data.completed} title={data.title} todoData={todoData} setTodoData={setTodoData} provided={provided} snapshot={snapshot} /> )} ~
25.React.memo 를 이용한 렌더링 최적화
강의 :
26.useCallback 을 이용한 함수 최적화
강의:
27.useMemo를 이용한 결과 값 최적화
강의 :
28.리액트 확장 프로그램 추가하기
강의 :
29.할 일 리스트 모두 지우기 버튼 생성
강의:
30.할 일 목록을 수정하는 기능 추가하기
강의:
componetnts/List.js
import React, { useState, useCallback } from 'react'; const List = React.memo(({ id, completed, title, todoData, setTodoData, provided, snapshot, handleClick }) => { const [isEditing, setIsEditing] = useState(false); const [editTitle, setEditTitle] = useState(title); const handleCompleteChange = useCallback((id) => { let newTodoData = todoData.map(data => { if (data.id === id) { data.completed = !data.completed; } return data; }); setTodoData(newTodoData); }, [todoData, setTodoData]); const handleEditChange = useCallback((e) => { setEditTitle(e.target.value); }, [setEditTitle]); const handleSubmit = () => { console.log(" id : ", id); let newTododata = todoData.map((data) => { if (data.id === id) { data.title = editTitle; } return data; }); setTodoData(newTododata); setIsEditing(false); }; if (isEditing) { return ( <div className="bg-gray-100 flex items-centerjustify-between w-full px-4 py-1 my-2 text-gray-600 border rounded"> <form onSubmit={handleSubmit}> <input className='w-full px-3 py-2' value={editTitle} onChange={handleEditChange} autoFocus /> </form> <div className='items-center'> <button className='px-4 py-2 float-right' onClick={() => handleClick(id)}>x</button> <button className='px-4 py-2 float-right' type="submit" onClick={handleSubmit}>저장</button> </div> </div > ); } else { return ( <div key={id} {...provided.draggableProps} ref={provided.innerRef} {...provided.dragHandleProps} className={snapshot.isDragging ? "selected" : "not-selected"} > <div className={`${snapshot.isDragging ? "bg-gray-300" : "bg-gray-100"} flex items-center justify-between w-full px-4 py-1 my-2 text-gray-600 border rounded`} key={id}> <div> <input type="checkbox" defaultChecked={completed} onChange={() => handleCompleteChange(id)} /> <span className={`${completed ? "line-through" : undefined} px-2`}>{title}</span> </div> <div className='items-center'> <button className='px-4 py-2 float-right' onClick={() => handleClick(id)}>x</button> <button className='px-4 py-2 float-right' onClick={() => setIsEditing(true)}>수정</button> </div> </div> </div> ); } }); export default List;
31.localStorage에 todoData 값 담기
강의:
[Firebase] Firebase 웹 호스팅 생성, 배포하기
https://lxxyeon.tistory.com/38
[react] firebase 프로젝트 배포하기
https://phrygia.github.io/react/2021-10-27-react-firebase/
도메인상태
기본
기본
댓글 ( 4)
댓글 남기기