Сочетание сокращения свойства и отдыха: {type, which, selected: {... selected, ... hovered}}: что здесь происходит? - PullRequest
0 голосов
/ 17 января 2019

РЕДАКТИРОВАТЬ: Для всех, кто сказал, что я должен предоставить контекст: в этом заключается ответ. Две из приведенных ниже переменных - type и which - поступают из внешних по отношению к этому выражению источников, и все в объекте, созданном путем расширения, присваивается выбранному. Я думал, что так или иначе напечатал и которые получали свои значения от объекта, созданного также распространением. Не тот случай!

Я изменяю код ушедшего ведущего разработчика и столкнулся с формулировкой, которую я не понимаю.

{ type, which, selected: { ...selected, ...hovered } }

из этого бита кода

export const renderSelector = createSelector(
  selectedTypeSelector,
  selectedSelector,
  hoveredSelector,
  (type, selected, hovered) => memoize(
    which => loadRender({ type, which, selected: { ...selected, ...hovered } }),
  ),
);

Я довольно близко изучил особенности ES6 и не помню, чтобы видел это. Я полностью получаю спред на правой стороне, но мне неясно, что происходит на левой стороне. То есть: что именно делает type, which, selected:? Я спросил, и мне объяснили, что имена полей слева от : выше захватывают совпадающие поля в объекте, созданном { ...selected, ...hovered }, и что несовпадающие поля объединяются в массив rest, если слева есть несоответствующее имя поля. Может кто-нибудь указать мне ссылку, которая описывает это? Спасибо!

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Выражение

{ type, which, selected: { ...selected, ...hovered } }

почти 1 эквивалентно

{
    "type": type,
    "which": which,
    "selected": Object.assign({}, selected, hovered)
}

, где type, which, selected и hovered - локальные переменные. Другими словами, "type" и "which" указываются с использованием сокращения свойства , а "selected" указывается явно как поверхностное объединение selected и hovered.


1 Я говорю "почти", потому что Object.assign запускает установщики свойств, а ... синтаксис распространения объекта - нет.

0 голосов
/ 17 января 2019

Вы создаете новый объект, используя type, wich, selected и hovered

const type = 'value of type';
const which = 'value of which';
const selected = {propOfSelected:'value1',sharedProp:'value1'};
const hovered = {sharedProp:'value2',newProp:'value of new prop'};
console.log({ type, which, selected: { ...selected, ...hovered } })

Более подробную информацию об этом можно найти здесь

0 голосов
/ 17 января 2019

Похоже,

{ type, which, selected: { ...selected, ...hovered } } 

некоторые переменные объединены в один объект, как

  • type
  • which
  • новый объект selected со свойствами
    • selected, который содержит объект
    • hovered, который тоже содержит объект

с свойствами короткой руки и синтаксис распространения ... для объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...