Что делает ...
этот код React (используя JSX) и как он называется?
<Modal {...this.props} title='Modal heading' animation={false}>
javascript
reactjs
Томас Йохансен
источник
источник
...
оператор ведет себя по-разному в разных контекстах. В этом контексте это оператор «распространения», описанный ниже @TJ Crowder. В другом контексте это также может быть оператор «отдыха», описанный ниже @Tomas Nikodym.Ответы:
Это нотация распространения собственности . Он был добавлен в ES2018 (распространение для массивов / итераций было ранее, ES2015), но он долгое время поддерживался в проектах React с помощью транспиляции (как « атрибуты распространения JSX », хотя вы могли бы делать это и в других местах, а не только в атрибутах). ).
{...this.props}
распределяет «свои» перечисляемые свойстваprops
как дискретные свойстваModal
создаваемого вами элемента. Например, еслиthis.props
содержитсяa: 1
иb: 2
, тобудет так же, как
Но он динамический, поэтому все «собственные» свойства
props
включены.Так
children
как это «собственное» свойство вprops
, распространение будет включать его. Так что, если компонент, где это появляется, имеет дочерние элементы, они будут переданыModal
. Поместить дочерние элементы между открывающим тегом и закрывающим тегом - это просто синтаксический сахар - хороший вариант - для помещенияchildren
свойства в открывающий тег. Пример:Показать фрагмент кода
Распространение нотации удобно не только для этого варианта использования, но и для создания нового объекта с большинством (или всеми) свойствами существующего объекта - который часто появляется при обновлении состояния, поскольку вы не можете изменять состояние непосредственно:
Это заменяет
this.state.foo
новым объектом все те же свойства, что иfoo
за исключениемa
свойства, которое становится"updated"
:Показать фрагмент кода
источник
children
собственность или они объединены?children
. Эксперимент показывает, что дочерниеchildren
элементы, которые вы предоставляете через вызываемый атрибут , заменяются на те, которые вы указали между начальным и конечным тегами, но если это неопределенное поведение, я уверен, что не буду полагаться на него.Как вы знаете,
...
они называются Spread Attributes, которые представляет имя, что позволяет расширять выражение.И в этом случае (я собираюсь упростить это).
Эта:
равно
Короче говоря, это аккуратный короткий путь, можно сказать .
источник
Три точки представляют оператор распространения в ES6. Это позволяет нам делать довольно много вещей в Javascript:
Конкатенированные массивы
Уничтожение массива
Объединение двух объектов
Для трех точек существует другое использование, которое известно как « Параметры покоя», и оно позволяет принимать все аргументы функции в виде одного массива.
Аргументы функции в виде массива
источник
Три точки в JavaScript - это оператор распространения / отдыха .
Оператор спреда
Синтаксис распространения позволяет выражение раскладывается в тех местах , где , как ожидается , несколько аргументов.
Параметры отдыха
Остальное синтаксис параметра используется для функций с переменным числом аргументов.
Оператор распространения / отдыха для массивов был введен в ES6. Там в Государственный 2 Предложение для объекта по распространению / свойств отдыха.
TypeScript также поддерживает синтаксис распространения и может переносить его в более старые версии ECMAScript с небольшими проблемами .
источник
Это особенность ES6, которая также используется в React. Посмотрите на приведенный ниже пример:
Этот способ хорош, если у нас максимум 3 параметра. Но что, если нам нужно добавить, например, 110 параметров. Должны ли мы определить их все и добавить их один за другим?
Конечно, есть более простой способ, который называется SPREAD . Вместо передачи всех этих параметров вы пишете:
Мы не знаем, сколько у нас параметров, но мы знаем, что их куча. На основе ES6 мы можем переписать вышеуказанную функцию, как показано ниже, и использовать разброс и отображение между ними, чтобы сделать ее такой же легкой, как кусок пирога:
источник
Это просто определение реквизита в JSX по- другому для вас!
Он использует
...
оператор массива и объекта в ES6 (объект еще не полностью поддерживается), поэтому, в основном, если вы уже определили свой реквизит, вы можете передать его своему элементу таким образом.Так что в вашем случае код должен выглядеть примерно так:
поэтому реквизиты, которые вы определили, теперь разделены и при необходимости могут быть использованы повторно.
Это равно:
Вот цитаты из команды React об операторе распространения в JSX:
источник
Для тех, кто пришел из мира Python, атрибуты распространения JSX эквивалентны распаковке списков аргументов (
**
оператор Python ).Я знаю, что это вопрос JSX, но работа с аналогами иногда помогает получить его быстрее.
источник
...
(Спрэд оператор) используется в реагируют на:обеспечить удобный способ передачи реквизита от родительских компонентов к дочерним. например, учитывая эти реквизиты в родительском компоненте,
они могут быть переданы следующим образом ребенку,
что похоже на это
но способ чище.
источник
Три точки
...
представляют операторы распространения или параметры покоя ,Это позволяет расширять выражение массива или строку или что-либо, что может повторяться , в местах, где ожидается ноль или более аргументов для вызовов функций или элементов для массива.
Обратите внимание, что
foo
свойство obj1 было перезаписано obj2foo
свойствомПримечание: Spread синтаксис (кроме как в случае распространенных свойств) может быть применено только к Iterable объектов: Так следующее выбросит ошибку
Reference1
Reference2
источник
Престижность Брэндону Морелли. Он прекрасно объяснил здесь , но ссылки могут умереть, поэтому я просто вставляю содержание ниже:
Синтаксис распространения состоит из трех точек:
...
он позволяет итерацию расширяться в местах, где ожидается 0+ аргументов. Определения жесткие без контекста. Давайте рассмотрим несколько различных вариантов использования, чтобы понять, что это значит.Пример # 1 - Вставка массивов Посмотрите на код ниже. В этом коде мы не используем синтаксис распространения:
Выше мы создали массив с именем
mid
. Затем мы создаем второй массив, который содержит нашmid
массив. Наконец, мы выходим из результата. Что вы ожидаетеarr
напечатать? Нажмите Run выше, чтобы увидеть, что происходит. Вот вывод:Это результат, который вы ожидали? Вставив
mid
массив вarr
массив, мы получили массив в массиве. Хорошо, если это было целью. Но что, если вам нужен только один массив со значениями от 1 до 6? Для этого мы можем использовать синтаксис распространения! Помните, что синтаксис распространения позволяет расширять элементы нашего массива. Давайте посмотрим на код ниже. Все то же самое - за исключением того, что теперь мы используем синтаксис распространения для вставкиmid
массива вarr
массив:И когда вы нажмете кнопку запуска, вот результат:
Потрясающие! Помните определение синтаксиса распространения, которое вы только что прочитали? Вот где это входит в игру. Как вы можете видеть, когда мы создаем
arr
массив и используем оператор распространения вmid
массиве, а не просто вставляем,mid
массив расширяется. Это расширение означает, что каждый элементmid
массива вставляется вarr
массив. Вместо вложенных массивов результатом является один массив чисел в диапазоне от 1 до 6.Пример №2. Математика В JavaScript есть встроенный математический объект, который позволяет нам выполнять некоторые забавные математические вычисления. В этом примере мы рассмотрим
Math.max()
. Если вы незнакомы,Math.max()
возвращает наибольшее из нуля или более чисел. Вот несколько примеров:Как видите, если вы хотите найти максимальное значение нескольких чисел,
Math.max()
требуется несколько параметров. К сожалению, вы не можете просто использовать один массив в качестве входных данных. До синтаксиса распространения самый простой способ использоватьMath.max()
массив.apply()
Это работает, это просто очень раздражает. Теперь посмотрим, как мы делаем то же самое с синтаксисом распространения:
Вместо того, чтобы создавать функцию и использовать метод apply для возврата результата
Math.max()
, нам нужны только две строки кода! Синтаксис распространения расширяет наши элементы массива и вводит каждый элемент в нашем массиве индивидуально вMath.max()
метод!Пример # 3 - Копирование массива В JavaScript вы не можете просто скопировать массив, установив новую переменную, равную уже существующему массиву. Рассмотрим следующий пример кода:
Когда вы нажмете кнопку run, вы получите следующий вывод:
Теперь, на первый взгляд, похоже, что это сработало - похоже, что мы скопировали значения arr в arr2. Но это не то, что случилось. Видите ли, при работе с объектами в JavaScript (массивы являются типом объекта) мы назначаем по ссылке, а не по значению. Это означает, что arr2 был назначен той же ссылке, что и arr. Другими словами, все, что мы делаем с arr2, также влияет на исходный массив arr (и наоборот). Посмотрите ниже:
Выше мы вставили новый элемент d в arr2. Тем не менее, когда мы выйдем из значения arr, вы увидите, что значение d также было добавлено в этот массив:
Не нужно бояться, хотя! Мы можем использовать оператор распространения! Рассмотрим код ниже. Это почти так же, как и выше. Однако вместо этого мы использовали оператор распространения в паре квадратных скобок:
Нажмите Run, и вы увидите ожидаемый результат:
Выше значения массива в arr расширены, чтобы стать отдельными элементами, которые затем были назначены для arr2. Теперь мы можем изменить массив arr2 настолько, насколько нам хотелось бы, без последствий для исходного массива arr:
Опять же, причина, по которой это работает, заключается в том, что значение arr расширяется, чтобы заполнить скобки нашего определения массива arr2. Таким образом, мы устанавливаем arr2 равным отдельным значениям arr вместо ссылки на arr, как мы это делали в первом примере.
Бонусный пример - строка в массив В качестве забавного финального примера вы можете использовать синтаксис распространения для преобразования строки в массив. Просто используйте синтаксис распространения в паре квадратных скобок:
источник
Три точки
(...)
называются оператором распространения, и это концептуально аналогично оператору распространения массива ES6, JSX использует преимущества этих поддерживаемых и развивающихся стандартов для обеспечения более чистого синтаксиса в JSX.Ссылка:
1) https://github.com/sebmarkbage/ecmascript-rest-spread#spread-properties
2) https://facebook.github.io/react/docs/jsx-spread.html
источник
Значение ... зависит от того, где вы используете его в коде,
источник
Это оператор распространения ...
Например, если у вас есть массив
first=[1,2,3,4,5]
и другойsecond=[6,7,8]
.[...first, ...second] //result is [1,2,3,4,5,6,7,8]
То же самое можно сделать с объектами json.
источник
Короче говоря, три точки
...
- это оператор распространения в ES6 (ES2015). Оператор Spread извлечет все данные.Даст результат [1,2,3,4,5,6]
Даст результат [7,8,1,2,3,4]
источник
Обычно называется оператором распространения, он используется для расширения везде, где требуется
пример
Вы можете использовать это там, где вам когда-либо потребуется, больше о синтаксисе оператора Spread .
источник
источник
... этот синтаксис является частью ES6, а не тем, что вы можете использовать только в React. Его можно использовать двумя различными способами; как оператор распространения или ИЛИ как параметр отдыха. Вы можете найти больше из этой статьи: https://www.techiediaries.com/react-spread-operator-props-setstate/
то, что вы упомянули в этом вопросе, выглядит примерно так:
с помощью оператора распространения вы можете передавать реквизиты компоненту следующим образом.
источник
Обычная практика - передавать информацию в приложении React. При этом мы можем применить изменения состояния к дочернему компоненту независимо от того, является он чистым или нечистым (без сохранения состояния или с сохранением состояния). Бывают случаи, когда лучший подход при передаче в реквизите - это передать в единичных свойствах или в целом объект свойств. Благодаря поддержке массивов в ES6 мы получили обозначение «...», и теперь мы можем передавать объект целиком ребенку.
Типичный процесс передачи реквизита ребенку отмечается следующим синтаксисом:
Это хорошо использовать, когда количество реквизита минимально, но становится неуправляемым, когда количество реквизита становится слишком большим. Проблема с этим методом возникает, когда вы не знаете свойств, необходимых в дочернем компоненте, и типичным методом JavaScript является простая установка этих свойств и последующее связывание с объектом. Это вызывает проблемы с проверкой propType и ошибками трассировки загадочного стека, которые бесполезны и вызывают задержки при отладке. Ниже приведен пример этой практики, а что не следует делать:
Этот же результат может быть достигнут, но с более подходящим успехом, выполнив это:
Но не использует JSX-распространение или JSX, поэтому, чтобы вернуться к уравнению, теперь мы можем сделать что-то вроде этого:
Свойства, включенные в "... props": foo: x, bar: y. Это может быть объединено с другими атрибутами, чтобы переопределить свойства "... props", используя этот синтаксис:
Кроме того, мы можем копировать другие объекты свойств друг на друга или комбинировать их следующим образом:
Или объедините два разных объекта, как это (это еще не доступно во всех версиях реакции):
Другой способ объяснить это, согласно сайту реакции / документации Facebook:
Если у вас уже есть «props» в качестве объекта и вы хотите передать его в JSX, вы можете использовать «...» в качестве оператора SPREAD для передачи всего объекта «props». Следующие два примера эквивалентны:
Атрибуты распространения могут быть полезны при создании универсальных контейнеров. Тем не менее, они также могут сделать ваш код грязным, упрощая передачу ненужных реквизитов компонентам, которые не заботятся о них. Этот синтаксис следует использовать с осторожностью.
источник
Его называют оператором распространения. Например, let hello = {name: '', msg: ''} let hello1 = {... hello} Теперь свойства объекта hello копируются в hello1.
источник
Это называется синтаксис спредов в javascript.
Он используется для деструктурирования массива или объекта в JavaScript.
пример:
Вы можете сделать то же самое с
Object.assign()
функции в JavaScript.Ссылка: Синтаксис распространения
источник
Это будет скомпилировано в:
где он дает более двух свойств
title
иanimation
за пределамиprops
элемента хоста имеет....
оператор ES6 называется Spread .См. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
источник
оператор распространения (тройной оператор) введен в ecama script 6 (ES6) .Ecama script (ES6) - это оболочка javascript.
перечислить оператор перечислимых свойств в подпорках. this.props = {firstName: 'Dan', lastName: 'Abramov', город: 'New York', страна: 'USA'}
Но основной оператор распространения признаков используется для ссылочного типа.
Это называется ссылочным типом, один объект влияет на другие объекты, потому что они доступны в памяти. Если вы получаете значение независимо, значит, распределенная память, используйте оператор распространения.
источник
если у вас есть массив элементов, и вы хотите отобразить элементы, которые вы просто используете ... arrayemaments, и он будет перебирать все элементы
источник
...
(три точки в Javascript) называется синтаксисом или оператором распространения. Это позволяет расширить итерацию, например выражение массива или строку , или объект выражение которое будет расширено, где бы оно ни размещалось. Это не относится к React. Это оператор Javascript.Все эти ответы здесь полезны, но я хочу перечислить наиболее часто используемые варианты практического использования синтаксиса Spread (Spread Operator).
1. Объединить массивы (объединенные массивы)
Существует множество способов объединения массивов , но оператор распространения позволяет разместить их в любом месте массива. Если вы хотите объединить два массива и разместить элементы в любой точке массива, вы можете сделать следующее:
2. Копирование массивов
Когда мы хотели получить копию массива, у нас был метод Array.prototypr.slice () . Но вы можете сделать то же самое с оператором распространения.
3. Вызов функций без применения
В ES5 для передачи массива из двух чисел в
doStuff()
функцию вы часто используете метод Function.prototype.apply () следующим образом:Однако, используя оператор распространения, вы можете передать массив в функцию.
4. Разрушающие массивы
Вы можете использовать деструктуризацию и оператор rest вместе для извлечения информации в переменные так, как вы хотите:
5. Аргументы функции как параметры покоя
ES6 также имеет три точки (...), которые являются параметром rest, который собирает все оставшиеся аргументы функции в массив.
6. Использование математических функций
Любая функция, в которой распространение используется в качестве аргумента, может использоваться функциями, которые могут принимать любое количество аргументов.
7. Объединение двух объектов
Вы можете использовать оператор распространения, чтобы объединить два объекта. Это простой и понятный способ сделать это.
8. Разделите строку на отдельные символы
Вы можете использовать оператор распространения, чтобы разбить строку на отдельные символы.
Вы можете придумать больше способов использования оператора распространения. То, что я перечислил здесь, является популярными вариантами его использования.
источник
Это новая функция в ES6 / Harmony. Это называется оператором распространения. Это позволяет вам либо отделить составные части массива / объекта, либо взять несколько элементов / параметров и склеить их вместе. Вот пример:
И с объектом / ключами:
Что действительно круто, так это то, что вы можете использовать его для обозначения «остальных ценностей».
источник
Это так называемые спреды. Как следует из названия. Это означает, что он помещает любое значение в этот массив или объекты.
Такие как :
источник