Как добавить условие if, чтобы предотвратить добавление пустых задач в приложение реагировать на задачи?

Это также смущает меня, и я чувствую, что предыдущие ответы не учитывали ваш фактический вопрос:

Зачем использовать конструкцию return wait, когда вы можете напрямую возвращать задачу из внутреннего вызова DoAnotherThingAsync ()?

Ну, иногда вы на самом деле хотите Task<SomeType>, но в большинстве случаев вам действительно нужен экземпляр SomeType, то есть результат задачи.

Из вашего кода:

async Task<SomeResult> DoSomethingAsync()
{
    using (var foo = new Foo())
    {
        return await foo.DoAnotherThingAsync();
    }
}

Человек, незнакомый с синтаксисом (например, я), может подумать, что этот метод должен возвращать Task<SomeResult>, но поскольку он помечен как async, это означает, что его фактический тип возврата SomeResult. Если вы просто используете return foo.DoAnotherThingAsync(), вы возвращаете задачу, которая не будет компилироваться. Правильный способ - вернуть результат задачи, поэтому return await.

0
задан Tholle 22 February 2019 в 11:53
поделиться

4 ответа

Попробуйте использовать этот подход

, если i не равен нулю, то только это будет выполнено

var i = this.state.input;
if(i){//then do something

  if (e.which === 13) {
  //    l.push(i)
  this.state.list.push(i);
  }
}
0
ответ дан Monica Acha 22 February 2019 в 11:53
поделиться

Если вы не хотите, чтобы пустые значения были отправлены, вы должны заполнить поле как требуется, добавив атрибут required в поле ввода.

Вы можете добавить условие if, чтобы проверить, что значение не равно NULL, перед нажатием в массив, например:

if(i) {
  // code to push to array
}
0
ответ дан Thanthu 22 February 2019 в 11:53
поделиться

Вы можете проверить i, чтобы увидеть, содержит ли он что-нибудь. Подобно этому

   if (e.which === 13) {       
      if (i) {
        const list = [...this.state.list, i]; 

        this.setState({
          list,
          input: ""
        });
      }

      e.preventDefault();
    }

Итак, на enter вы проверяете, не является ли i не пустым (пустые строки , ложные ), а затем вы добавляете его в свое состояние. Вы предотвращаете вариант по умолчанию в любом случае, поэтому не обновляете страницу при пустой отправке ввода.

Подробнее см. В этом кодовом окне: https://codesandbox.io/s/14jy6jmm04

.
0
ответ дан Alex G 22 February 2019 в 11:53
поделиться

Прежде всего, у вас есть большая ошибка в вашем коде, вы изменяете состояние без функции setState (). Поэтому удалите эту строку кода:

this.state.list.push(i);

Далее вам нужно получить значение ввода и проверить, имеет ли оно значение Falsey (0, пустая строка, ноль). Если это так, вы предотвращаете поведение по умолчанию и возвращаетесь из функции. Вы можете извлечь значение из e.target.value

pressEnter = e => {
   var i = this.state.input;
    let value = e.target.value;
    if (e.which === 13) {
      if (!value) {
        e.preventDefault();
        return;
     }

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

  this.setState({
    //    list : l,
    list: [...this.state.list, value], // this is a new array
    input: ""
  });

В конце вам также нужно добавить уникальный ключ к элементам 'ul'. Вы можете использовать индекс элемента в списке.

  {list.map((data, index) => {
    return <li key={index}>data</li>;
  })}

Вот ссылка на рабочий код:

https://codesandbox.io/s/5y0747y7yp

0
ответ дан watsabitz 22 February 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: