Задать вопрос
melkaya94
@melkaya94

Как правильно сделать счетчик?

Нужно посчитать сколько объектов было выбрано.
В state есть пустой объект, при клике на карточку в этот объект записывается информация в таком виде id карточки - ключ, состояние (true/false) - значение по этому ключу. Я пытаюсь сделать счетчик карточек, у которых состояние true, для этого прохожу forEach по объекту из state и если id:true то увеличиваю счетчик. Вот код:
constructor(...args) {
		super(...args);
		this.handleOnClick = ::this.handleOnClick;
		this.amountSelectSwatches = ::this.amountSelectSwatches;
		this.state = {
			selectCard: {} //объект, где хранятся выбранные карточки
		};
	}
//по клику делам карточку выделенной и пишем в объект ее id
handleOnClick(i){
		this.setState({
			selectCard: {
				...this.state.selectCard,
				[i]: !this.state.selectCard[i]
			}
		},() => {this.amountSelectSwatches(this.state.selectCard)}); // вызов счетчика

	}
	amountSelectSwatches(obj){
		this.count = 0;
		Object.keys(obj).forEach((i) => {
			if (obj[i]) {
				this.count = this.count + 1;
			}
		});
	}

Работает не так как ожидается, не могу понять в чем ошибка
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Средний 7 комментариев
Пригласить эксперта
Ответы на вопрос 2
RomReed
@RomReed
JavaScript, Flutter, ReactNative, Redux, Firebase
@melkaya94, <code lang="javascript">
async handleOnClick(i){
		await this.setState({
			selectCard: {
				...this.state.selectCard,
				[i]: !this.state.selectCard[i]
			}
		},() => {this.amountSelectSwatches(this.state.selectCard,i)}); // вызов счетчика

	}
	amountSelectSwatches(obj,ind){ 
if(obj[ind]===true){
 await this.setState({
count:Object.assign({},this.state.count,{[ind]:++this.state.count[ind]})
})
}}
</code>

если вам это не нравится вы можете использовать глобальную переменную для хранения count
Ответ написан
@davidnum95
Странный способ хранения выделенных карточек вы выбрали. Зачем вам объект? Храните просто массив.
Пример
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Wanted. Санкт-Петербург
До 300 000 ₽
Grow Media Москва
от 150 000 до 200 000 ₽
12 дек. 2024, в 19:06
45000 руб./за проект
12 дек. 2024, в 18:46
4000 руб./за проект
12 дек. 2024, в 18:18
10000 руб./за проект