У меня есть массив и класс

let questions = [
    {
        questionText: '',
        answerOptions: [],
    },
];


class Questions {
constructor(questionText,answerOptions) {
    this.questionText = questionText;
    this.answerOptions = [answerOptions];
}

}

Я заполняю их через форму и когда нажимаю на кнопку, пытаюсь заполнить массив

   const pressSave = () => {
    //check
    const correctNum = newAnswerCorrect

    if (correctNum<0){
        return
    }

    if (newQuestion.question === ""){
        return
    }

    for (let i = 0; i < newAnswer.answers.length; i++) { // выведет 0, затем 1, затем 2
        if (newAnswer.answers[i].answerText === ""){
            return
        }
    }

    const answArray = [
        {
            answerText: newAnswer.answers[0]?.answerText, isCorrect: false
       },
        {
            answerText: newAnswer.answers[1]?.answerText, isCorrect: false
        },
        {
            answerText: newAnswer.answers[2]?.answerText, isCorrect: false
        },
        {
            answerText: newAnswer.answers[3]?.answerText, isCorrect: false
        }
    ]
    answArray[correctNum].isCorrect = true

    if (currentQuestion === 0){


        questions[0] =  new Questions(
            newQuestion.question,
            answArray
        )
        setCurrentQuestion(currentQuestion + 1)
        console.log("Is 0 element")
        console.log(questions)
        return questions

    }

    
    questions[currentQuestion] =  new Questions(
        newQuestion.question,
        answArray
    )
    setCurrentQuestion(currentQuestion + 1)
    console.log("Is", currentQuestion, "element")
    console.log(questions)
    return questions
}

Первый элемент добавлен хорошо

first

Но если еще раз попробовать что-то добавить, бывает, что все стирается

second

Зачем?

Я пытаюсь дополнить его формой, которая выглядит вот так it

error

вот что произойдет, если вы попытаетесь добавить элемент много раз, 0-й элемент имеет тело + много пустых элементов и + + последний правильный элемент

Вот гитхаб, вот весь код, не знаю как по другому предоставить доступ к песочнице

0
Alice 9 Апр 2021 в 10:08

1 ответ

Лучший ответ

Песочница этого проекта для отладки могла бы дать лучший ответ. Но я предполагаю, что вы определяете эту переменную questions в локальной функции или в самом компоненте, что заставляет ее назначать:

let questions = [
    {
        questionText: '',
        answerOptions: [],
    },
];

Каждый раз при рендеринге компонента.

Изменить: пожалуйста, в следующий раз добавьте весь компонент. Причина, по которой вы сталкиваетесь с этим, заключается в том, что вы поместили let questions = ... в начало функции, поэтому каждый раз, когда она отображает вас, вы игнорируете значение questions. Вы можете быстро исправить это, поместив это назначение за пределы функционального компонента. Но я бы не рекомендовал такую ​​глобальную переменную. Я бы посоветовал вам рассматривать вопросы как состояние, т.е. const [questions, setQuestions] = useState<Questions[]>([]) и измените состояние, добавив в состояние новый вопрос.

Не обращайте внимания на этот ответ, если вы определили его как глобальную переменную.

2
YohaiM 9 Апр 2021 в 07:33