Как читать сигнатуры
Разделы сигнатур обычно выглядят так:
vnode = m(selector, attributes, children)
| Аргумент | Тип | Обязательный | Описание |
|---|---|---|---|
selector | String|Object | Да | CSS селектор или компонент |
attributes | Object | Нет | HTML атрибуты или свойства элемента |
children | Array<Vnode>|String|Number|Boolean | Нет | Дочерние виртуальные DOM-узлы. Могут быть переданы как аргументы с переменным количеством элементов |
| возвращает | Vnode | Виртуальный DOM-узел |
Строка сигнатуры над таблицей демонстрирует общий синтаксис метода, включая имя метода, порядок аргументов и предлагаемое имя переменной для возвращаемого значения.
Столбец Аргумент в таблице указывает, какая часть сигнатуры описывается в соответствующей строке таблицы. Строка возвращает содержит информацию о возвращаемом значении метода.
Столбец Тип определяет ожидаемый тип данных для аргумента.
Символ вертикальной черты (|) указывает, что аргумент может иметь любой из перечисленных типов. Например, String|Object означает, что selector может быть строкой ИЛИ объектом.
Угловые скобки (< >) после Array указывают на ожидаемый тип элементов массива. Например, Array<String> означает, что аргумент должен быть массивом, и все элементы в этом массиве должны быть строками. Угловые скобки после Object указывают на структуру данных "карта" (map). Например, Object<String,Component> означает, что аргумент должен быть объектом, ключи которого являются строками, а значения - компонентами.
Иногда могут встречаться нестандартные типы, указывающие на требуемую структуру объекта. Например, Vnode - это объект, имеющий структуру виртуального DOM-узла.
Столбец Обязательный указывает, является ли аргумент обязательным или необязательным. Если аргумент необязательный, можно установить для него значение null или undefined, либо опустить его, чтобы следующий аргумент занял его место.
Необязательные аргументы
Аргументы функции, заключенные в квадратные скобки [ ], являются необязательными. В примере ниже url является необязательным аргументом:
m.request([url,] options)
Splats
Splat аргумент означает, что если аргумент является массивом, можно опустить квадратные скобки и передать переменное количество аргументов в метод.
В примере выше это означает, что m("div", {id: "foo"}, ["a", "b", "c"]) можно записать как m("div", {id: "foo"}, "a", "b", "c").
Splats полезны в некоторых языках, компилируемых в JS, таких как CoffeeScript, а также позволяют использовать удобные сокращения в некоторых распространенных случаях.
Сигнатуры функций
Функции обозначаются стрелкой (->). Левая часть стрелки указывает типы входных аргументов, а правая часть указывает тип возвращаемого значения.
Например, parseFloat имеет сигнатуру String -> Number, что означает, что она принимает строку в качестве входных данных и возвращает число в качестве выходных данных.
Функции с несколькими аргументами обозначаются круглыми скобками: (String, Array) -> Number
Сигнатуры компонентов
Компоненты обозначаются вызовами m, где начальный аргумент селектора установлен в константу, имя которой соответствует контексту:
vnode = m(m.route.Link, attributes, children)
| Аргумент | Тип | Обязательный | Описание |
|---|---|---|---|
attributes.href | Object | Да | Маршрут назначения. |
attributes.selector | String|Object|Function | Нет | Определяет используемый тег. Должен быть допустимым селектором для m, если указан, по умолчанию "a". |
attributes.options | Object | Нет | Задает параметры для m.route.set. |
attributes | Object | Нет | Другие атрибуты, передаваемые виртуальному DOM-узлу. |
children | Array<Vnode>|String|Number|Boolean | Нет | Дочерние виртуальные DOM-узлы для этой ссылки. |
| возвращает | Vnode | Виртуальный DOM-узел. |
Дочерние элементы можно передавать как аргументы с переменным количеством элементов, если иное не указано в тексте.
Элемент без дочерних элементов и/или атрибутов может опустить соответствующий параметр:
vnode = m(Component, attributes)
| Аргумент | Тип | Обязательный | Описание |
|---|---|---|---|
attributes.href | Object | Да | Целевой маршрут для перехода. |
attributes | Object | Нет | Другие атрибуты, применяемые к возвращаемому виртуальному DOM-узлу |
| возвращает | Vnode | Виртуальный DOM-узел |