Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.08.2021, 21:08
Новичок на форуме
Отправить личное сообщение для BossVlados94 Посмотреть профиль Найти все сообщения от BossVlados94
 
Регистрация: 01.08.2021
Сообщений: 1

Перекраска кнопки. Javascript React
Всем привет. Я делаю квиз на реакте. Из json файла подтягиваю текст вопроса, варианты ответа и признак верности ответа. При нажатии выполняется функция handleAnswerOptionClick, которая принимает на параметр isCorrect и в зависимости от ответа увеличивает очки или ничего не делает. Хочу так же добавить чтобы в случае если isCorrect истина, то кнопка покрасится в зеленый, иначе в красный и небольшая пауза чтобы было видно перекраску перед переходом к следующему вопросу. Вот только я понятия не имею как это сделать корректно. Либо указать на конкретный стиль, либо прописать его в js. Скормил гуглу кучу формулировок но нигде не нашел нужного решения. Подскажите пожалуйста решение.

Quizz.jsx
import React, { useState } from "react"
import "./Quizz.css";

const Quizz = () => {
    const questions = require("./questions.json")

    const [currentQuestion, setCurrentQuestion] = useState(0)
    const [score, setScore] = useState(0)
    const [showScore, setShowScore] = useState(false)

    const handleAnswerOptionClick = (isCorrect) => {
        if (isCorrect) 
            setScore((score + 1))
            
        //     this.style.background = '#7bb970'
        //     this.style.color = '#green'
        // }

        // else {
        //     this.style.background = '#7bb970'
        //     this.style.color = 'ffffff'
        // }

        const nextQuestion = currentQuestion + 1

        if (nextQuestion < questions.length) setCurrentQuestion(nextQuestion)
        else setShowScore(true)
    }

    const refresh = () => {
        setCurrentQuestion(0)
        setScore(0)
        setShowScore(false)
    }

    return (
        <section className="test">
            <h2 className="test__heading">Проверь себя</h2>
            <p className="test__description">Пройди тест из 8 вопросов и узнай, <br /> почему планету необходимо спасать уже сейчас</p>
            <div className="quizz">
                {
                    showScore
                        ? <div className="section__score">
                            <div>Правильных ответов {score} из {questions.length}</div>
                            <button className="refresh_btn"
                                onClick={refresh}>Попробовать еще раз</button>
                        </div>
                        : <div className="question__section">
                            {/* <div className="question__count">
                      <span>Вопрос {currentQuestion + 1} </span> / {questions.length}
                  </div> */}
                            <div className="question__text">
                                {questions[currentQuestion].questionText}
                            </div>
                            <div className="answer__section">
                                {questions[currentQuestion].answerOptions.map(item => (
                                    <button className="button__quizz" onClick={() => handleAnswerOptionClick(item.isCorrect)}>
                                        {item.answerText}
                                    </button>
                                ))}
                            </div>
                        </div>
                }
            </div>
        </section>
    )
}
export default Quizz;


questions.json
[
    {
        "questionText": "Сколько литров пресной воды тратится на 100 мл кофе?",
        "answerOptions": [
            {
                "answerText": "Менее 30 л",
                "isCorrect": false
            },
            {
                "answerText": "50 л",
                "isCorrect": false
            },
            {
                "answerText": "130 л",
                "isCorrect": true
            }
        ]
    },
    {
        "questionText": "Повторное использование вещей сокращает эко-след на:",
        "answerOptions": [
            {
                "answerText": "70 %",
                "isCorrect": true
            },
            {
                "answerText": "50 л",
                "isCorrect": false
            },
            {
                "answerText": "10 л",
                "isCorrect": false
            }
        ]
    },
    {
        "questionText": "Сколько лет будет разлагается полиэтиленовый пакет?",
        "answerOptions": [
            {
                "answerText": "~ 50 лет",
                "isCorrect": false
            },
            {
                "answerText": "~ 100 - 200 лет",
                "isCorrect": true
            },
            {
                "answerText": "~ 500 лет",
                "isCorrect": false
            }
        ]
    },
    {
        "questionText": "Сколько нужно пластиковых бутылок, чтобы сделать 1 пару кроссовок?",
        "answerOptions": [
            {
                "answerText": "Более 150",
                "isCorrect": false
            },
            {
                "answerText": "Около 100",
                "isCorrect": false
            },
            {
                "answerText": "Около 20",
                "isCorrect": true
            }
        ]
    },
    {
        "questionText": "Переработка сокращает загрязнение воды на:",
        "answerOptions": [
            {
                "answerText": "20 %",
                "isCorrect": false
            },
            {
                "answerText": "50 %",
                "isCorrect": true
            },
            {
                "answerText": "80 %",
                "isCorrect": false
            }
        ]
    },
    {
        "questionText": "Сколько тонн нефти ежегодно попадает в океан?",
        "answerOptions": [
            {
                "answerText": "Менее 1 млн тонн",
                "isCorrect": false
            },
            {
                "answerText": "Менее 5 млн тонн",
                "isCorrect": false
            },
            {
                "answerText": "От 5 до 10 млн тонн",
                "isCorrect": true
            }
        ]
    },
    {
        "questionText": "Сколько лет будет разлагаться пластиковая зубная щетка?",
        "answerOptions": [
            {
                "answerText": "От 80 до 200 лет",
                "isCorrect": false
            },
            {
                "answerText": "До 500 лет",
                "isCorrect": false
            },
            {
                "answerText": "От 500 до 1000 лет",
                "isCorrect": true
            }
        ]
    },
    {
        "questionText": "Сколько кг мусора производит российская семья из 4 человек?",
        "answerOptions": [
            {
                "answerText": "Около 400 кг",
                "isCorrect": true
            },
            {
                "answerText": "Около 200 кг",
                "isCorrect": false
            },
            {
                "answerText": "Менее 100 кг",
                "isCorrect": false
            }
        ]
    }
]
Ответить с цитированием
  #2 (permalink)  
Старый 02.08.2021, 09:22
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от BossVlados94
Вот только я понятия не имею как это сделать корректно.
Основная идея Реакта - работа от состояния.
Т.е. твои презентационные компоненты должны отрисовываться исходя из некоего состояния.
Т.о. тебе придется продумать то состояние, на основании которого, кнопка будет того или иного цвета... Ну и организовать смену этого состояния...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
frontend разработчик JavaScript Москва Михаил2016 Работа 4 21.08.2016 13:30
Крупный российский интегратор ищет Руководителя разработки Javascript Kate_unity Работа 1 13.11.2015 14:49
Требуется javascript ninja для небольшой задачи Achilles_sm Работа 7 01.07.2015 17:33
Бесплатный курс JavaScript (18 уроков)  Bokal Учебные материалы 2 16.11.2014 20:20
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34