Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- useMemo
- React
- vue.js #v-if #v-show #주니어프론트개발자
- 디파이방법
- codingApple
- Dynamic Routes
- swap
- vue #npm #vuex #vue-router
- 스왑방법
- draganddrop
- github-pages
- Nuxt.js #캡틴판교 #인프런 #복습용도
- BTC
- context api
- #캡틴판교 #Nuxt.js #인프런 #SSR #CSR
- next13
- Cake
- githubpages
- nuxt3
- vue3
- Nested Routes
- prettier
- transitionGroup
- useNuxtAPp
- nextjs
- #Nuxt.js #캡틴판교 #vue.js
- STAKING
- React.memo
- postman #vue #api
- v-model
Archives
- Today
- Total
내맘대로 frontend 낙서장
리액트 todo에서 만든 drag and drop 본문
만든것
** 윈도우녹화로해서 저렇지 실제로 드래그 해서 옮긴거임....
HTML에 있는 onDragOver, onDrop onDragStart를 이용해서 구현했다.
메인 App.jsx에는
const handleDragStart = (e, list, index) => {
const dragInfo = { list, index }
e.dataTransfer.setData('text/plain', JSON.stringify(dragInfo))
dragInfo.draggedList = list // draggedList 설정
}
const handleDrop = (e, list) => {
e.preventDefault()
const dropInfo = JSON.parse(e.dataTransfer.getData('text/plain'))
// const { list: draggedList, index: draggedIndex } = dropInfo
const draggedList = dropInfo.list
const draggedIndex = dropInfo.index
if (list === draggedList) return
const newList = [...list]
const draggedItem = draggedList[draggedIndex]
newList.splice(draggedIndex, 0, draggedItem)
console.log(draggedList)
// draggedList.splice(draggedIndex, 1)
const updatedList = draggedList.slice()
updatedList.splice(draggedIndex, 1)
console.log(draggedList, doList, list)
// 상태 업데이트
// 아래 list === doList부분은 JSON.stringify가 없어도 잘비교됨
// 근데.. 위에는 있어야됨 why...??
if (JSON.stringify(draggedList) === JSON.stringify(doList))
setDoList([...updatedList])
if (JSON.stringify(draggedList) === JSON.stringify(DoingList))
setDoingList([...updatedList])
if (JSON.stringify(draggedList) === JSON.stringify(DoneList))
setDoneList([...updatedList])
if (list === doList) setDoList([...newList])
if (list === DoingList) setDoingList([...newList])
if (list === DoneList) setDoneList([...newList])
}
const handleDragOver = (e) => {
e.preventDefault()
}
아직도 못 푼 객체 비교의 진실 ;;
리스트 컴포넌트에는 해당 Do,Done,Doing 을 이루는 전체 div에 onDragOver, onDrop이벤트를 걸었고
리스트 태그인 li에는 onDragStart를 넣었다.
코드를 다 넣으면 괜히 블로그 길만 길어서 보기도 불편하고 핵심 함수만 남김
어차피 내가 나중에 또 볼꺼기 때문
자세한 코드는
https://github.com/hyunjunyong/react-study
여기다 남겨뒀으니 까먹으면 확인할 수 있도록
※ 문뜩 든생각인데 내가 저렇게 링크 걸어두고 나중에 저걸 투두 지우고 다른걸로 만드는 만행을 저지르진 않겠지....?
에이 설마.../
'react' 카테고리의 다른 글
React로 만든 플젝 GItHub Pages로 배포하기 (0) | 2023.04.04 |
---|---|
리액트 기본개념 총정리 1편 (0) | 2023.04.03 |
[에러 기록] 풀리지 않는 객체 비교 (0) | 2023.03.30 |
react todolist 실습중 (0) | 2023.03.28 |
React router 실습 도중 에러 해결 (0) | 2023.03.27 |