[TIL] 22.01.14
10603 ワード
序文
チームプロジェクトを行っていて、タイマーを作っています.サーバはまだ作成されていないのでnextjsの/pages/apiフォルダでmock apiで操作しました.
タイマーロジックの作成が難しく、幸い参考になったのでcustom hookで少し修正しました.残りの時間値を1秒ごとにサーバに伝えたいので、PUTで送信を続ける形で作業します.
予測タスクセッション作成ページ タイマーを作成 タイマ機能の作成 スタート タワー 更新 mock apiにバインド mock apiデータ を作成する
404ページ エラーページ 操作タイマ提供情報のmock api
ローカル実行時
GET - http://localhost:3000/api/timer
PUT - http://localhost:3000/api/timer body: {remainingTime: number} ソースコード
404、エラーページ
基本セットボックス後期の個人動作も作業前の作業シーンを描き、作業終了後に文字で整理して大満足です.これからもこのようなやり方で仕事を続けていくと、残りがたくさんあります. これとは異なり、チームプロジェクトを行い、コミュニケーションの重要性を真剣に学んでいる.残り時間よりもやることが多く、整理されていないところも多いので焦っています.
チームプロジェクトを行っていて、タイマーを作っています.サーバはまだ作成されていないのでnextjsの/pages/apiフォルダでmock apiで操作しました.
タイマーロジックの作成が難しく、幸い参考になったのでcustom hookで少し修正しました.残りの時間値を1秒ごとにサーバに伝えたいので、PUTで送信を続ける形で作業します.
予測タスク
ローカル実行時
GET - http://localhost:3000/api/timer
PUT - http://localhost:3000/api/timer body: {remainingTime: number}
// src/pages/api/timer
// 기본 타이머 정보 값
interface Timer {
id: string
start: boolean
duration: number
remainingTime: number
level: number
}
export default function handler(
req: NextApiRequest,
res: NextApiResponse<Timer>
) {
// 1초마다 타이머 정보값 수정 확인
if (req.method === 'PUT') {
const newData = {
...data,
remainingTime: JSON.parse(req.body.remainingTime),
}
res.status(200).json(newData)
} else {
res.status(200).json(data)
}
}
```
- timer 계산 hooks
```tsx
// ## 사용예시
// ## 실제구현 src/hooks/useTimer 참고
// 인자 duration: 지속 시간, onEnd: 타이머 종료 후 callback 함수
/*
- minutes 남은 시간에서 분 부분
- seconds 남은 시간에서 초 부분
- remainingTime 남은 시간 밀리세컨드 단위
- start 타이머 시작 함수
- stop 타이머 스탑 함수
- reset 타이머 재시작 함수
*/
{...}
const { minutes, seconds, start, stop, reset, isRunning, remainingTime } =
useTimer({
duration: data?.data?.duration,
onEnd: () => {},})
const putRemainTime = async (time) => {
await axios.put(
'http://localhost:3000/api/timer',
{
remainingTime: Math.floor(time),
},
{ withCredentials: true }
)
}
// * useEffect를 통해서 서버에 1초마다 바뀐 값을 던져줌
useEffect(() => {
let timer
if (isRunning) {
timer = setTimeout(() => putRemainTime(remainingTime / 100))
}
if (!isRunning) {
clearTimeout(timer)
}
return () => clearTimeout(timer)
}, [isRunning, seconds])
基本セットボックス後期の個人動作も作業前の作業シーンを描き、作業終了後に文字で整理して大満足です.これからもこのようなやり方で仕事を続けていくと、残りがたくさんあります.
Reference
この問題について([TIL] 22.01.14), 我々は、より多くの情報をここで見つけました https://velog.io/@sbinha/TIL-22.01.14テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol