Это также смущает меня, и я чувствую, что предыдущие ответы не учитывали ваш фактический вопрос:
Зачем использовать конструкцию return wait, когда вы можете напрямую возвращать задачу из внутреннего вызова DoAnotherThingAsync ()?
blockquote>Ну, иногда вы на самом деле хотите
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
.
Попробуйте использовать этот подход
, если i не равен нулю, то только это будет выполнено
var i = this.state.input;
if(i){//then do something
if (e.which === 13) {
// l.push(i)
this.state.list.push(i);
}
}
Если вы не хотите, чтобы пустые значения были отправлены, вы должны заполнить поле как требуется, добавив атрибут required
в поле ввода.
Вы можете добавить условие if, чтобы проверить, что значение не равно NULL, перед нажатием в массив, например:
if(i) {
// code to push to array
}
Вы можете проверить 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
.Прежде всего, у вас есть большая ошибка в вашем коде, вы изменяете состояние без функции 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>;
})}
Вот ссылка на рабочий код: