codestates / codestates/33Plan

[DevLog] 서외구 / 2022-03-04 / 메타인지테스트 기능 구현

Open
#66 0 comments 0 reactions 1 assignee Claimed by @sud665 View on GitHub
Bare-Minimum DevLog Front-end
Dominant language
JavaScript
Stars
2
Forks
4
PR merge metrics
No merged PRs in 30d

Description

### 오늘은 어떻게 프로젝트에 기여했나요?

- 메타인지 테스트의 60초 동안 단어카드가 랜더링 되는 기능 구현

### 오늘의 프로젝트에서 힘든 점은 무엇인가요?

- setInterval, setTimeout, clearInterval 함수 사용법을 알아내는데 힘들었음
- Math.random()를 사용해서 배열의 무작위 값을 가져오는데 반복되는 숫자가 만들어져서 생성된 인덱스를 지우는데 힘들었음
- 위 문제를 splice()를 사용해서 해당 인덱스의 값을 지우고 나서 상태변경을 해줌

```js
function MetaTestModal ({MetaTestHandlerClose}) {
/* TODO : 메타인지 테스트에 랜덤으로 2초마다 60초동안 카드가 랜더링되게 하기 */
const [metaData, setMetaData] = useState(data);
const [second, setsecond] = useState('')

const [timerNum, setTimerNum] = useState(60)

const handleRandom = () => {
let newMeta = metaData.slice()
let randomNum = Math.floor(Math.random() * newMeta.length)
newMeta.splice(randomNum,1)
setMetaData(newMeta)
// 선택된 번호는 지우기 구현
// setMetaData(metaData.splice())
// 더미데이터를 항상 랜덤하게 정렬해서 순서대로 보여주는게 나은지 / 아니면 특정인덱스를 제거해야할지
return setTimerNum(randomNum)
}
let card = metaData[timerNum]
// 더미데이터를 1초마다 갱신시킨다. 근데 함수 시작하고 6초후에 멈춘다.
const handleTimerNum = () => {
countingSecond()
let timer = setInterval(()=> handleRandom(), 2000)
setTimeout(() => clearInterval(timer),62000)
setTimeout(() => setTimerNum(null) ,62000)
}

const countingSecond = () => {
let num = 60;
let timer = setInterval(() => setsecond(num--), 1000)
setTimeout(() => clearInterval(timer),61000)
}

const handleModalClose = () => {
MetaTestHandlerClose()
}

return (
<>



{second}초

단어카드


{card}

딱 한번만 누르세요




닫기




);
}

export default MetaTestModal;
```

### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?

- [ ] 메타인지테스트 결과 입력창 구현예정 (예상갯수, 정답입력, 결과)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.