Вычисляемое свойство ES6 в React

Моя четвертая каретка сломана, я понятия не имею, почему она не уменьшается.

constructor(props) {
  super(props);
  this.containerWidth = props.width || "100%";

  this.state = {
    current_hour: 0,
    current_minute: 0,
    hour_interval: 1,
    minute_interval: 1
  };

  // this.handleAdjuster = this.handleAdjuster.bind(this);
}

handleAdjuster(action, type) {
  if (action === "add") {
    this.setState({
      [`current_${type}`]: this.state[`current_${type}`] + this.state[`${type}_interval`]
    });
  } else if (action === "minus") {
    this.setState({
      [`current_${type}`]: this.state[`current_${type}`] - this.state[`${type}_interval`]
    });
  }
}

Что-то не так с моим обработчиком кликов? Я сделал демо https://codesandbox.io/s/v8xw3lnzpy чтобы продемонстрировать мою проблему, попробуйте щелкнуть 4-ю курсор.

«Моя четвертая каретка сломана» ??? Карет? Как в бриллиантах? Или ^? Я не вижу ни того, ни другого в коде. Можете ли вы обновить свой вопрос с помощью минимальный воспроизводимый пример, демонстрирующего проблему, в идеале работоспособный, используя Stack Snippets (кнопка панели инструментов [<>]). Фрагменты стека поддерживают React, включая JSX; вот как это сделать.
T.J. Crowder 27.03.2018 08:54
"Что-то не так с моим обработчиком кликов?" Да, вы должны использовать версию обратного вызова setState каждый раз, когда вы создаете новое состояние на основе существующего. Подробности здесь. Возможно, это не проблема, которую вы наблюдаете, но вполне может быть другая проблема, если кто-то щелкает достаточно быстро.
T.J. Crowder 27.03.2018 08:55

@ T.J. Crowder щелкните демонстрацию, и вы ее увидите.

Sharon Chai 27.03.2018 08:56

Полное содержание вашего вопроса должно быть в вашим вопросом, а не только ссылкой. Ссылки гниют, делая вопрос и ответы на него бесполезными для людей в будущем, и людям не нужно уходить за пределы сайта, чтобы помочь вам. Задайте вопрос минимальный воспроизводимый примерв, в идеале используя Stack Snippets (кнопка панели инструментов <>), чтобы сделать его работоспособным.

T.J. Crowder 27.03.2018 08:56

@ T.J.Crowder, почему мой инкремент работает? Я пробовал нажимать быстро, не вижу никаких проблем.

Sharon Chai 27.03.2018 08:57

Если просто так получится, что обновления не складываются, это сработает. Но это не значит, что это правильно, или что вы не должны делать то, что говорится в документации.

T.J. Crowder 27.03.2018 08:58

@ T.J.Crowder примет это к сведению, но этот вопрос о другом? Я не думаю, что проблема была вызвана использованием стиля обратного вызова.

Sharon Chai 27.03.2018 09:01

Я подозреваю, что это так, да, поэтому я сказал это выше. («Возможно, это не проблема, которую вы наблюдаете ...») Я не знаю наверняка, потому что в вопросе недостаточно кода, чтобы знать. Код в вопросе кажется прекрасным Другие, чем эта проблема, но я подозреваю, что проблема в коде, который вы не показали.

T.J. Crowder 27.03.2018 09:02

@ T.J.Crowder, ссылка на демонстрациюcodeandbox содержит рабочий код с воспроизводимой проблемой.

Shubham Khatri 27.03.2018 09:05

@ShubhamKhatri: Так работает не так. См. Этот комментарий вышеВот этот).

T.J. Crowder 27.03.2018 09:06

@ T.J.Crowder Я уже сократил свое приложение до небольшой части кода, чтобы продемонстрировать проблему, что не так с вопросом выше?

Sharon Chai 27.03.2018 09:13

Я тебе уже сказал. См. этот комментарий и этот комментарий.

T.J. Crowder 27.03.2018 09:14
Caret = ^. Carat = Precious stone measurement unit. @ T.J.Crowder
Arman Charan 27.03.2018 09:17

@ArmanCharan: Совершенно верно, у меня плохо. :-)

T.J. Crowder 27.03.2018 09:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
14
735
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш «минус» (4-я) каретка находится внутри «добавить» (3-я) каррета, и всякий раз, когда вы нажимаете «минус», выполняется первый дочерний элемент и выполняется минус, но затем выполняется и родительский элемент (и это «добавление» 3-го кадра) это отменяет 4-ю каретку. Поместите четвертый карет под третьим, а не внутрь. Простая иерархическая ошибка.

Что-то вроде этого:

  <div>
    <div className = "control-wrap">
      <div
        onClick = {() => this.handleAdjuster("add", "minute")}
        className = "caret-wrap"
      >
        <span className = "caret">&#9650;</span>
      </div>

      <div
        onClick = {() => this.handleAdjuster("minus", "minute")}
        className = "caret-wrap"
      >
        <span className = "caret">&#9660;</span>
      </div>
    </div>
  </div>

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