如何阅读签名
签名部分通常如下所示:
vnode = m(selector, attributes, children)
参数 | 类型 | 是否必须 | 描述 |
---|---|---|---|
selector | String|Object | 是 | CSS 选择器或组件 |
attributes | Object | 否 | HTML 属性或元素属性 |
children | Array<Vnode>|String|Number|Boolean | 否 | 子 vnode,可以写作 splat 参数 |
返回值 | Vnode | 一个 vnode |
表格上方的签名行展示了该方法的一般语法,包括方法名、参数顺序以及建议的返回值变量名。
表格中的 参数 列指示了该行描述的是签名的哪个参数。returns
行则描述了方法的返回值。
类型 列指示了参数的预期类型。
竖线 (|
) 表示参数可以是列出的任何类型。例如,String|Object
表示 selector
可以是字符串或对象。
Array
后的尖括号 (< >
) 表示数组元素的预期类型。例如,Array<String>
表示参数必须是一个字符串数组。Object
后的尖括号表示一个映射(键值对)。例如,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 在一些编译为 JavaScript 的语言(例如 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 | 否 | 可传递其他属性应用于返回的 vnode。 |
children | Array<Vnode>|String|Number|Boolean | 否 | 此链接的子 vnode。 |
返回值 | Vnode | 一个 vnode。 |
如果指定了子元素,默认情况下它们可以作为 splat 参数 传入,除非文档中另有说明。
没有合理子元素和/或属性的元素可以选择完全省略相关参数:
vnode = m(Component, attributes)
参数 | 类型 | 是否必须 | 描述 |
---|---|---|---|
attributes.href | Object | 是 | 目标路由。 |
attributes | Object | 否 | 可应用于返回 vnode 的其他属性 |
返回值 | Vnode | 一个 vnode |