Как обновить строку таблицы?

#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)) и посмотрите, что вы получите, и будете работать оттуда? У меня была подобная проблема, и это было связано с тем, что я фактически возвращал с карты.