chore: Add lib SWR
This commit is contained in:
parent
c4e875d306
commit
8182ce42ba
@ -38,6 +38,7 @@
|
|||||||
"recoil": "^0.7.7",
|
"recoil": "^0.7.7",
|
||||||
"sweetalert2": "^11.14.1",
|
"sweetalert2": "^11.14.1",
|
||||||
"sweetalert2-react-content": "^5.0.7",
|
"sweetalert2-react-content": "^5.0.7",
|
||||||
|
"swr": "^2.3.0",
|
||||||
"usehooks-ts": "^3.1.0",
|
"usehooks-ts": "^3.1.0",
|
||||||
"uuid": "^10.0.0"
|
"uuid": "^10.0.0"
|
||||||
},
|
},
|
||||||
|
|||||||
25
src/app/api/swr-tutorial/route.js
Normal file
25
src/app/api/swr-tutorial/route.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import { NextResponse } from 'next/server'
|
||||||
|
|
||||||
|
const defaultData = [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name: 'John Doe',
|
||||||
|
email: 'john.doe@example.com',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
name: 'Jane Lee',
|
||||||
|
email: 'jane.lee@example.com',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export async function GET(req, res) {
|
||||||
|
return NextResponse.json(defaultData)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const POST = async (req, res) => {
|
||||||
|
const { id, name, email } = await req.json()
|
||||||
|
const newData = { id, name, email }
|
||||||
|
console.log('🚀 ~ POST ~ newData:', newData)
|
||||||
|
return NextResponse.json([...defaultData, newData])
|
||||||
|
}
|
||||||
@ -23,6 +23,8 @@ import QSelectBox from './common/select/QSelectBox'
|
|||||||
import SampleReducer from './sample/SampleReducer'
|
import SampleReducer from './sample/SampleReducer'
|
||||||
|
|
||||||
import styles from './playground.module.css'
|
import styles from './playground.module.css'
|
||||||
|
import useSWR from 'swr'
|
||||||
|
import useSWRMutation from 'swr/mutation'
|
||||||
|
|
||||||
export default function Playground() {
|
export default function Playground() {
|
||||||
const [useCadFile, setUseCadFile] = useRecoilState(useCadFileState)
|
const [useCadFile, setUseCadFile] = useRecoilState(useCadFileState)
|
||||||
@ -32,7 +34,7 @@ export default function Playground() {
|
|||||||
const fileRef = useRef(null)
|
const fileRef = useRef(null)
|
||||||
const queryRef = useRef(null)
|
const queryRef = useRef(null)
|
||||||
const [zoom, setZoom] = useState(20)
|
const [zoom, setZoom] = useState(20)
|
||||||
const { get, promiseGet, promisePost } = useAxios()
|
const { get, promiseGet, post, promisePost } = useAxios()
|
||||||
const testVar = process.env.NEXT_PUBLIC_TEST
|
const testVar = process.env.NEXT_PUBLIC_TEST
|
||||||
const converterUrl = process.env.NEXT_PUBLIC_CONVERTER_API_URL
|
const converterUrl = process.env.NEXT_PUBLIC_CONVERTER_API_URL
|
||||||
const { getMessage } = useMessage()
|
const { getMessage } = useMessage()
|
||||||
@ -252,6 +254,22 @@ export default function Playground() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getFetcher = async (url) => {
|
||||||
|
const res = await get({ url })
|
||||||
|
console.log('🚀 ~ getFetcher ~ res:', res)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
const postFetcher = async (url, { arg }) => {
|
||||||
|
const res = await post({ url, data: arg })
|
||||||
|
console.log('🚀 ~ postFetcher ~ res:', res)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
const [getFetcherCallFlag, setGetFetcherCallFlag] = useState(false)
|
||||||
|
const { data: tutoData, error, isLoading } = useSWR('http://localhost:3000/api/swr-tutorial', getFetcher)
|
||||||
|
const { trigger, isMutating } = useSWRMutation('http://localhost:3000/api/swr-tutorial', postFetcher)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="container mx-auto p-4 m-4 border">
|
<div className="container mx-auto p-4 m-4 border">
|
||||||
@ -548,14 +566,25 @@ export default function Playground() {
|
|||||||
<div className="my-2">
|
<div className="my-2">
|
||||||
<Button onClick={() => setManagementState({})}>GlobalDataProvider 초기화</Button>
|
<Button onClick={() => setManagementState({})}>GlobalDataProvider 초기화</Button>
|
||||||
</div>
|
</div>
|
||||||
<div className="my-2">
|
{/* <div className="my-2">
|
||||||
<p>{managementStateLoaded?.objectNo}</p>
|
<p>{managementStateLoaded?.objectNo}</p>
|
||||||
</div>
|
</div> */}
|
||||||
<div className="my-2">
|
<div className="my-2">
|
||||||
<Button onClick={() => swalFire({ text: 'alert 테스트입니다.', type: 'alert', confirmFn: () => console.log('Alert!!!') })}>
|
<Button onClick={() => swalFire({ text: 'alert 테스트입니다.', type: 'alert', confirmFn: () => console.log('Alert!!!') })}>
|
||||||
Sweetalert - alert
|
Sweetalert - alert
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="my-2">
|
||||||
|
{tutoData &&
|
||||||
|
tutoData.map((item) => (
|
||||||
|
<div key={item.id}>
|
||||||
|
{item.name} / {item.email}
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
<div className="my-2">
|
||||||
|
<Button onClick={() => trigger({ id: 3, name: 'seulda kim', email: 'seulda.kim@interplug.co.kr' })}>insert data</Button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user