Приложение React — TypeError: невозможно добавить свойство setState, объект не расширяемый

Я очень новичок в кодировании, поэтому, пожалуйста, извините меня, если мой вопрос неверен.

Я пытаюсь создать приложение для пустяков с реакцией, но, похоже, оно не работает. В настоящее время я работаю над тем, чтобы приложение переходило от одного вопроса к другому при нажатии на ответ.

Теперь я получаю эту ошибку TypeError: невозможно добавить свойство setState, объект не расширяемый. Я уже чувствую себя немного отчаявшимся, потому что мне кажется, что ничего не работает.

Может ли кто-нибудь помочь мне и указать, что мне делать дальше?

Общая информация.js:

    state = {
        questionId: 0
    };

nextQuestion () {
    this.setState = () => {
        return{questionId: this.state.questionId + 1}
    };
};

render(){
    return(
        <div>
            <Question 
                trivia = {quizList[this.state.questionId]} 
                onClick = {this.nextQuestion}
            />
        </div>
    )
}

Вопрос.js

render(){

    return(
        <div>
            <div>
                <h2>{this.props.quiz.question}</h2>
            </div>
            <div>
                {this.props.quiz.answers.map((quizAnswer)=>
                    <li onClick = {()=>this.props.onClick()}>
                        {quizAnswer.ans}
                    </li>
                )} 
            </div>
       </div>
    )
}

}

Вы расширяете класс Component? С помощью конструктора?

stever 05.02.2019 21:32

this.setState(() => { return{questionId: this.state.questionId + 1} })

Minan 05.02.2019 21:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
1 395
4

Ответы 4

Вы назначаете setState здесь:

this.setState = () => {
    return{questionId: this.state.questionId + 1}
};

Вы должны быть вызов это:

this.setState(state => {
  return {
    questionId: state.questionId + 1
  };
});

Изменять

     this.setState = () => {
    return{questionId: this.state.questionId + 1}
};

К

     this.setState(prevState => ({
         return {questionId: prevState.questionId + 1}
    ))};

Я предполагаю, что ваша цель - иметь состояние по умолчанию для вашего класса.

То, что вы пытаетесь сделать, называется Поле класса и в настоящее время находится в статусе предложения, поэтому оно у вас не работает. Вы можете либо установить что-то, что преобразует это в действительный javascript, либо установить состояние по умолчанию, подобное этому.

class MyComponent extends Component {
  constructor(props) {
    super(props);
       questionId: 0
    state = {
    };
  }
}

Вам всегда нужно передавать свое предыдущее состояние в жизненном цикле в качестве параметра, если вы вызываете this.setState() таким образом.

nextQuestion () {
    this.setState = (prevState) => {
        return{questionId: this.prevState.questionId + 1}
    };
};

Другие вопросы по теме