Могу ли я использовать деструктуризацию как-то внутри оператора if?

Есть ли способ, которым я мог бы сделать что-то подобное?

if({color, size, shape} = this.props){
  console.log('Received all props!');
} else {
  console.log('There are some missing props');
}

Я хочу знать, получил ли я все необходимые данные через реквизиты моего Компонента, и если нет, то выдает ошибку.

Это для создания повторно используемых компонентов.

1 ответ

Решение

Вы можете использовать значения по умолчанию:

function missing(prop) {
    throw new TypeError(`there is a missing ${prop} property`);
}

…
try {
  const {
    color = missing("color"),
    size = missing("size"),
    shape = missing("shape"),
  } = this.props;
  // use color, size, shape here
  console.log("Received all props!");
} catch(err) {
  console.log(err.message);
}

Использовать if утверждение, нет, вы не можете использовать деструктурирование для создания логического значения, все ли свойства есть. Скорее сделать что-нибудь обычное, как

if ("color" in this.props && "size" in this.props && "shape" in this.props) {
  console.log('Received all props!');
} else {
  console.log('There are some missing props');
}

(или еще лучше, проверьте тип ожидаемого значения)

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