Разрушение вложенных объектов: как получить родительские и дочерние значения? - PullRequest
0 голосов
/ 08 февраля 2019

В приведенной ниже функции я получаю объект textarea со свойством current.

Здесь вложенная деструктура работает с переменными Start и End.Но переменная current не работает.

function someFunction({ current: { selectionStart: Start, selectionEnd: End } }, AppStateSetter) {

    // do something with current, Start, and End
}

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Я думаю, что проблема, с которой вы сталкиваетесь, возникает, когда ток равен undefined.

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

function ({ current: { selectionStart: Start, selectionEnd: End } = {} }, AppStateSetter) {
  // do something with Start and End
}

Если вы считаете, что вам нужен доступ current также попробуйте выполнить деструктуризацию внутри функции.

function ({ current = {}}, AppStateSetter) {
  const { selectionStart: Start, selectionEnd: End } = current
  // do something with current, Start and End
}
0 голосов
/ 02 июня 2019

Вы можете деструктурировать и назначить значение по умолчанию в одном операторе.

function someFunction({
        current: {
          selectionStart: Start,
          selectionEnd: End
        } = {},
        current = {}
      },
      AppStateSetter) {
      // now you can use the let variables Start, End and current,
      // with current's default value set to empty object
      }

Если вы не хотите назначать значение по умолчанию для текущей, но по-прежнему хотите использовать эту переменную, вы можете просто написатьназвание объекта без присвоения.Когда someFunction вызывается с пустым объектом, если вы не назначите текущее значение по умолчанию, оно будет неопределенным.

    function someFunction1({
        current: {
          selectionStart: Start,
          selectionEnd: End
        } = {},
        current
      },
      AppStateSetter) {
      // now you can use the let variables Start, End and current
      // if empty object is passed, current will be undefined
    }

Фрагмент JsFiddle: Разрушение вложенного объекта с помощью ибез значений по умолчанию

0 голосов
/ 08 февраля 2019

Первая деструктуризация создает только переменные Start и End.Если вы хотите создать current как переменную, вам нужно объявить ее снова.

function ({ current: { selectionStart: Start, selectionEnd: End }, current }, AppStateSetter) {

// do something with current , Start , and End

}

Вы можете протестировать его на компиляторе Babel :

Этот код:

const object = {
  current: {
    selectionStart: "prop 1",
    selectionEnd: "prop2"
  }
}

const { current: { selectionStart: Start, selectionEnd: End } } = object;

Получает trasnpiled to:

var object = {
  current: {
    selectionStart: "prop 1",
    selectionEnd: "prop2"
  }
};

var _object$current = object.current,
    Start = _object$current.selectionStart,
    End = _object$current.selectionEnd;

Как видите, переменная current не создана.

...