Quiz.js 2.81 KB
Newer Older
김민수's avatar
김민수 committed
1
2
import React from 'react'
import { Link } from 'react-router-dom';
김민수's avatar
김민수 committed
3
import Timer from 'react-compound-timer'; // Timer 를 쓰기위한 import --> npm i react-compound-timer로 설치 먼저
김민수's avatar
김민수 committed
4
5

const question = [
김민수's avatar
김민수 committed
6
7
8
    { Q: "6 X 4 ?", Choose: [6, 12, 18, 24], A: "" },
    { Q: "3 + 3 ?", Choose: [2, 4, 6, 8], A: "" },
    { Q: "3 - 1 ?", Choose: [1, 2, 3, 4], A: "" }
김민수's avatar
김민수 committed
9
10
11
]

class Quiz extends React.Component {
김민수's avatar
김민수 committed
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    constructor(props) {
        super(props)
        this.setQuestion = this.setQuestion.bind(this)
        this.answerbox = this.answerbox.bind(this)
        this.state = {
            ...question[0],
            i: 0,
            page: 0,
        }
    }
    setQuestion() {
        //값이 입력되지 않은채로 넘겨졌을 때 문제 해결 해야 함-sj-
        this.setState({ ...question[this.state.i + 1], i: this.state.i + 1, page: this.state.page + 1 })
    }
    //answerbox - answer박스의 값을 네임리스트로 받아와서 값을 localstorage에 저장 
    answerbox() {
        let answers = document.getElementsByName('answer');
        let count = answers.length
        // let checked_index = -1;
        let checked_value = '';
        for (let i = 0; i < count; i++) {
            if (answers[i].checked) {
                // checked_index = i;
                checked_value = answers[i].value;
                localStorage.setItem('answer-' + i, checked_value)
            }
        }
김민수's avatar
김민수 committed
39
40
    }

김민수's avatar
김민수 committed
41
    render() {
김민수's avatar
김민수 committed
42
        return (
김민수's avatar
김민수 committed
43
44
45
46
47
48
49
50
51
            <div className="Quiz">
                <h2>Q:{this.state.Q}</h2>
                {this.state.Choose.map((a) =>
                    <div>
                        <input type="radio" name='answer' id={a} value={a} /*ref={this.textInput}*/ />
                        <label for={a}>{a}</label>
                    </div>)
                }
                <div className="App">정답을 입력하세요</div>
김민수's avatar
김민수 committed
52

김민수's avatar
김민수 committed
53
                {/* 마지막 질문일 경우 /end페이지로 이동, 그렇지 않을경우는 this.setQuestion발생 */}
김민수's avatar
김민수 committed
54
                {(this.state.page === question.length - 1)
김민수's avatar
김민수 committed
55
                    ? <Link to="/end">제출</Link>
김민수's avatar
김민수 committed
56
                    :  <button type="button" onClick={this.setQuestion}>다음</button>
김민수's avatar
김민수 committed
57
                }
김민수's avatar
김민수 committed
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
                <br />
               <Timer
                    initialTime={5000}
                    direction="backward"
                    checkpoints={[
                        {
                            time: 0,
                            callback: () => this.setQuestion// callback 다음에 뭐라고 써야할까요....??
                        }
                    ]}
                >
                    {() => (
                        <>
                            <Timer.Seconds /> seconds
                        </>
                    )}
                </Timer>
김민수's avatar
김민수 committed
75
76
77
78
79
80
            </div>
        )
    }
}

export default Quiz;