Quiz.js 3.21 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import React, { useState } from 'react'
import { Link } from 'react-router-dom';
import Timer from 'react-compound-timer'; // 타이머쓰기위해 import


const QnA = [
    { Q: "6 X 4 ?", Choose: [6, 12, 18, 24], A: "", N: 1 },
    { Q: "3 + 3 ?", Choose: [2, 4, 6, 8], A: "", N: 2 },
    { Q: "3 - 1 ?", Choose: [1, 2, 3, 4], A: "", N: 3 }
]

function Quiz() {
    let [question, setQuestionss] = useState({
        ...QnA[0],
        i: 0,
        page: 0,
    })
JeongYeonwoo's avatar
quiz    
JeongYeonwoo committed
18
    let [selected, setSelected] = useState("")  //선택한 답을 보여줄 것들
19
20
21
22
23
24
25

    function setQuestion() {
        setQuestionss({ ...QnA[question.i + 1], i: question.i + 1, page: question.page + 1 })
    }
    let handleChange = (ev) => {
        ev.preventDefault()  //새로고침 안되도록
        setSelected(ev.target.value)  //selected값 변경
JeongYeonwoo's avatar
quiz    
JeongYeonwoo committed
26
27
        let slt = ev.target.value  //slt에 선택한값 받아옴

28
29
30
31
32
        let count = question.Choose.length  //이거 정확히 뭘로할지 모르겠어요 ㅜㅜ

        // let checked_index = -1;
        let checked_value = '';
        checked_value = slt;
JeongYeonwoo's avatar
quiz    
JeongYeonwoo committed
33

34
35
36
37
38
        //localStorage.setItem('번문제 답' + checked_value, checked_value)
        for (let i = 0; i < count; i++) {
            if (ev.target.checked) {  //이거 맞는지도 잘..
                // checked_index = i;
                checked_value = slt;
JeongYeonwoo's avatar
quiz    
JeongYeonwoo committed
39
                localStorage.setItem(question.i + 1 + '번문제 답', checked_value)
40
41
42
43
44
45
46
47
            }
        }
    }
    return (
        <div className="Quiz">
            <h2>Q:{question.Q}</h2>
            <div>
                <form onSubmit={handleChange}>
JeongYeonwoo's avatar
quiz    
JeongYeonwoo committed
48
                    {question.Choose.map((a, index) =>
JeongYeonwoo's avatar
다시    
JeongYeonwoo committed
49
                        <div key={index}>
JeongYeonwoo's avatar
quiz    
JeongYeonwoo committed
50
                            <input type="radio" name='answer' id={'anwer' + a} value={a} onClick={handleChange} />
51
52
53
54
55
                            <label htmlFor={a}> {a}</label>
                        </div>
                    )}
                    <input hidden type="submit" value="확인" />    {/*버튼 숨김*/}
                </form>
JeongYeonwoo's avatar
quiz    
JeongYeonwoo committed
56
57
                <p>선택한  :<span style={{color : "green", fontWeight : "bold", fontSize: "30px"}}> {selected}</span>  {/* 선택한  보여줌 */}
                </p>
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
            </div>


            <div className="App">정답을 입력하세요</div>


            {/* 마지막 질문일 경우 /end페이지로 이동, 그렇지 않을경우는 this.setQuestion발생 */}
            {(question.page === QnA.length - 1)
                ? <Link to="/end">제출</Link>
                : <button type="button" onClick={setQuestion} >다음</button>

            }

            {/* <input onKeyPress="this.enterkey()"/> */}


JeongYeonwoo's avatar
quiz    
JeongYeonwoo committed
74
            
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
            <Timer
                initialTime={3050}
                direction="backward"
                checkpoints={[
                    {
                        time: 0,
                        callback: setQuestion
                        //  history.go(1)
                    }
                ]}
            >
                {() => (
                    <>
                        <Timer.Seconds /> seconds
                        </>
                )}
JeongYeonwoo's avatar
quiz    
JeongYeonwoo committed
91
            </Timer>     {/* npm i react-compound-timer */}
92
93
94
95
96
97
98
99
100
101

        </div>
    )



}


export default Quiz;