에러
질문 작성 > 삭제 > 재작성 시 id 중복해결 // id 난수화 Math.random() , randomUUID()
Minhhk
2023. 3. 1. 13:43
에러의 경우//
ask 에서 질문 생성 후 post 보내고 delete 요청 후,
질문 재생성 할 때 id 가 중복되는 현상이 발생하였다,,
id 설정
- useRef() 를 사용하여 .current 값에 +1
- get 으로 받아온 데이터를 저장하여 그것의 .length +1
의 두가지 방법으로 get, post 하고 있었다.
우선 POST 로 게시글 3개를 작성하여 보내었다.
./data.json 에 저장이 되었다.
"ask" : [
{
"id": 1,
"title": "1등",
"contents": "1234",
"answer": []
},
{
"id": 2,
"title": "2등",
"contents": "1234",
"answer": []
},
{
"id": 3,
"title": "3등",
"contents": "1234",
"answer": []
},
]
여기서 delete 를 보내어 id === 2 를 삭제 하면,
id 는 1과 3이 남을 텐데
.current 나 length +1 로 단순히 게시글을 추가할려고 했을 때,
id === 3 이 중복이 되어 에러가 났다.
이를 해결하고자
첫번째 방법?!
Math.random().toString(24) // '0.diniiah6ej73'
Math.random() 으로 랜덤한 숫자를 생성하고 거기에 .toString()을 하면 랜덤한 문자열이 나오게 된다는 뜻이다.
그리고 .toString(radix)은 매개변수로 2~36 사이의 정수를 받는데 이는 진수를 나타내는 값이다.
부동 소수점을 제거 위해 substr 사용한다.
Math.random().toString(24).substr(2,13); // 'diniiah6ej73'
문자열로 생성된 난수화 id를 볼 수 있다.
두번째 방법?!
let uuid = crypto.randomUUID();
console.log(uuid) // "36b8f84d-df4e-4d49-b662-bcde71a8764f"
crypto.randomUUID() 를 사용하여도 난수화된 id를 얻을 수 있었다.
따라서 중간 게시물을 삭제하여도 다시 생성되는 id와 중복되지 않았다👍🏻