Daily Front_Minhhk

질문 작성 > 삭제 > 재작성 시 id 중복해결 // id 난수화 Math.random() , randomUUID() 본문

에러

질문 작성 > 삭제 > 재작성 시 id 중복해결 // id 난수화 Math.random() , randomUUID()

Minhhk 2023. 3. 1. 13:43

에러의 경우//

ask 에서 질문 생성 후 post 보내고 delete 요청 후,
질문 재생성 할 때 id 가 중복되는 현상이 발생하였다,,

 

id 설정

  1. useRef() 를 사용하여 .current 값에 +1 
  2. 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와 중복되지 않았다👍🏻