A drag-and-drop sortable list in react(width js)
npm install @badahertz52/sortable-list
bash
npm i @badahertz52/sortable-list
`
$3
$3
#### โ SortableItem
์ฌ์ฉ์๊ฐ ์ง์ ํ data ์์ ์์ดํ
๋ค์ ๊ฐ์ธ๊ณ ์๋ html์์, ๋๋๊ทธ,๋๋กญ ์ด๋ฒคํธ(๋ชจ๋ฐ์ผ์์๋ ํฐ์น ์ด๋ฒคํธ)๋ฅผ ํตํด ์ฌ์ ๋ ฌ๋๋ค.
`js
const SortableItem = (
index,
draggable,
children,
onDragStart,
onDropItem,
onClickItem,
mobileDrag,
setMobileDrag,
startIndex
) => {
return {children} ;
};
`
- SortableItem์ props
|props|์ค๋ช
|
|---|---|
| index|SortableItem์ด ๊ฐ์ธ๊ณ ์๋ data ์ ์์ดํ
์ index |
draggable|๋ง์ฐ์ค๋ก ๋๋๊ทธ ํ ์ ์๋ ์ง ์ฌ๋ถ, type:boolean|
children|data ์์ ์์ดํ
์ ํ๋ฉด์ ํ์ํ๋ ์ปดํฌ๋ํธ ,
์์ : TestItem |
onDragStart| ๋๋๊ทธ ์,startIndex์ ์ํ๋ฅผ ๋๋๊ทธ๋๋ ์์ดํ
์ index๋ก ๋ณ๊ฒฝํ๋ ํจ์ |
onDropItem| ์์ดํ
์ ๋๋กญ ์, ๋๋กญ๋๋ ์์น์ ๋ง๊ฒ ์์ดํ
์ ์ฌ์ ๋ ฌํ๋ ํจ์|
onClickItem|์ ๋ ฌ๋ ์์ดํ
๋ค์ ํด๋ฆญ ํ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ|
mobileDrag, setMobileDrag|๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์์ ๋๋๊ทธ์ค ๋๋กญ์ ์์ํ๋ ์ง ์ฌ๋ถ|
#### โ SortableList
์ฌ๋ฌ ๊ฐ์ SortableItem์ ๊ฐ์ง๊ณ ์๋, SortableItem์ ๋ถ๋ชจ ์์
`js
const SortableList = ( data,
onClickItem,
renderItem,
updateData,
dragItemStyleProps = undefined) => {
....
}
`
- SortableList์ props
|props|์ค๋ช
|
|---|---|
|data|์ ๋ ฌํ ์์ดํ
๋ค์ ๋ด์ ๋ฐฐ์ด๋ก ๋ฐฐ์ด์ ์์์ ํ์์ ์ฌ์ฉ์๊ฐ ์ง์ ํ ์ ์์.
type: Array|
|onClickItem|์ ๋ ฌ๋ ์์ดํ
๋ค์ ํด๋ฆญ ํ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ |
|renderItem| SortableItem์ children ์์๋ฅผ ๋ฐํํ๋ ํจ์๋ก ์ ๋ ฌํ ์์ดํ
์ ํ๋ฉด์์ ์ด๋ป๊ฒ ๋ณด์ผ ์ง๋ฅผ ๊ฒฐ์ ํจ.
parameter: item (data์ item), index(item์ data ์ index) |
|updateData|onDropItem ์์ item์ ์ฌ์ก๋ ฌํด data๋ฅผ ๋ณ๊ฒฝํ ๋, ๋ณ๊ฒฝ๋ data๋ฅผ SortableList ์ธ๋ถ์์๋ ๋ฐ์ํ ์ ์๊ฒ ํด์ค. |
|dragItemStyleProps| ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์์ ๋๋๊ทธ์ค ๋๋กญ์ ์คํ ์, ํฐ์น ํฌ์ธํธ๋ฅผ ๋ฐ๋ผ๋ค๋๋ ์์์ ์คํ์ผ๋ก ๊ธฐ๋ณธ๊ฐ์ undefined
type:CSSProperties|undefined|
$3
- App.js
`js
import SortableList from "@badahertz52/sortable-list";
import { data } from "./TestItem/testData";
import TestItem from "./TestItem/TestItem";
function App() {
const onClickItem = (index) => {
alert(index);
};
return (
data={data}
renderItem={(item, index) => }
onClickItem={onClickItem}
/>
);
}
export default App;
`
- TestItem.jsx
`js
import React from "react";
import "./TestItem.css";
function TestItem({ data, index }) {
return (
content:{data.content}
index:{index}
);
}
export default TestItem;
`
- testData.js
`js
export const data = [
{ content: "Apple ๐" },
{ content: "Banana ๐" },
{ content: "Carrot ๐ฅ" },
{ content: "Dessert ๐ง" },
];
`
2. Skill & Scripts
$3
- HTML, CSS, TypeScript
- React
$3
`bash
npm i
`
$3
`bash
npm run start
`
$3
`bash
npm publish
``