#javascript #reactjs #jsx
#javascript #reactjs #jsx
Вопрос:
У меня есть таблица, в которой отображаются элементы, выбранные пользователем. Прямо сейчас, когда пользователь добавляет элемент, элемент добавляется как новая строка. Я попытался изменить его так, чтобы вместо создания новой строки оно увеличивало величину. Это, однако, не сработало, поскольку я получил сообщение об ошибке, в котором говорится, что мне нужно еще после :
.
<table>
<thead>
<tr>
<th>Item</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
{this.state.basket.map(item => {
return (
{this.getAmount(item) === 0 ? (
<tr>
<td>{item}</td>
<td>{this.getAmount(item)}</td>
</tr>
) : (
this.updateAmount(item);
)
)
})}
</tbody>
</table>
Как бы мне изменить это, чтобы рядом с элементом было amount
?
Метод получения суммы:
getAmount = item => {
var amount = 0;
var basket = [...this.state.basket];
basket.forEach(i => {
if (i === item) {
amount ;
}
});
console.log(item " : " amount);
return parseInt(amount);
};
Метод обновления количества:
updateAmount = item => {
return this.getAmount(item);
};
Комментарии:
1. Можете ли вы добавить код
updateAmount
функции?2. @ArnaudChrist Я сделал 🙂
3. Чего вы пытаетесь достичь? Вы хотите увеличить сумму для элемента в состоянии, если оно равно 0? Что
getAmount
делает?4. Тогда, может быть, также
getAmount
функция 🙂 И я не знаю, является ли это опечаткой, когда в вашем коде у вас естьthis.get.getAmount(item)
? Если нет, то чтоthis.get
?5. Я предполагаю, что часть в «else» должна иметь некоторую форму JSX, но не слишком уверен, что поместить.
Ответ №1:
Я новичок в React, но похоже, что метод, который вы вызываете в своем ‘else’, просто возвращает некоторое значение, а не jsx. Ваш результат ‘if’ возвращает jsx, но ваш else просто вызывает функцию, которая просто возвращает значение.
getAmount = item => {
var amount = 0;
var basket = [...this.state.basket];
basket.forEach(i => {
if (i === item) {
amount ;
}
});
console.log(item " : " amount);
return (
<React.Fragment>
<span>{parseInt(amount)}</span>
</React.Fragment>
)
};
Я, скорее всего, далек от истины, так как я только начал изучать React, но я полагаю, что стоит попробовать, если это действительно поможет. Или вы можете сделать <React.Fragment>
часть прямо в своем else и поместить функцию внутрь <span>
, но не уверены, сработает ли это.
Комментарии:
1. извините за это … можно также попробовать извлечь карту из таблицы и создать для нее отдельный метод renderCount, а затем в методе renderCount выполнить отладку по пути. когда вы нажмете на этот else console.log(parseInt(amount)) и посмотрите, что вы получите, и будете работать оттуда? У меня была подобная проблема, и это было связано с тем, что я фактически возвращал с карты.