流是一种可以有关联反应的数据结构,类似于表格应用中的单元格。
例如,在表格中,如果 A1 = B1 + C1
,则修改 B1
或 C1
时,A1
也会被自动修改。
你可以使一个流依赖于其他流,以便更改一个流时可以自动更改其他的流。当你有一个非常耗资源的计算,且希望只在必要的时候执行,而不是每次重绘时都执行,这时流就会派上用场。
Stream 模块并没有包含在 Mithril 的核心发行版中。要引入 Stream 模块,请使用:
var Stream = require("mithril/stream")
如果你没有使用模块化工具对文件进行打包,也可以直接直接引用该模块:
<script src="https://unpkg.com/mithril-stream"></script>
当直接通过 <script>
标签引入文件时,stream 库会暴露到 window.m.stream
。如果你想把 stream 库和 Mithril 一起使用,则需要在引入 mithril-stream
之前先引入 Mithril,因为 Mithril 会把 window.m
直接覆盖掉。
创建流
stream = Stream(value)
参数 | 类型 | 是否必须 | 描述 |
---|---|---|---|
value |
any |
否 | 如果存在该值,则流的值会被设置为该值。 |
返回 | Stream |
返回一个 Stream |
创建计算流,如果其上面的流发生了更新,则它也会更新。参见组合流
stream = Stream.combine(combiner, streams)
参数 | 类型 | 是否必须 | 描述 |
---|---|---|---|
combiner |
(Stream..., Array) -> any |
是 | 详见 combiner 参数 |
streams |
Array<Stream> |
是 | 要组合的流的列表 |
返回 | Stream |
返回一个流 |
指定计算流的值的生成方式。详见组合流。
any = combiner(streams..., changed)
参数 | 类型 | 是否必须 | 描述 |
---|---|---|---|
streams... |
多个 Streams |
否 | 0 个或多个流,会传入到 stream.combine 的第二个参数中 |
changed |
Array<Stream> |
是 | 受更新影响的流列表 |
返回 | any |
返回一个计算值 |
创建一个流,它的值是一组流的值组成的数组。
stream = Stream.merge(streams)
参数 | 类型 | 是否必须 | 描述 |
---|---|---|---|
streams |
Array<Stream> |
是 | 一个流组成的数组 |
返回 | Stream |
返回一个流,它的值是一组流的值组成的数组。 |
创建一个新的流,其值是
stream = Stream.scan(fn, accumulator, stream)
参数 | 类型 | 是否必须 | 描述 |
---|---|---|---|
fn |
(accumulator, value) -> result |
是 | 一个函数,使用累加器和值作为参数,并返回新的累加器的值 |
accumulator |
any |
是 | 累加器的起始值 |
stream |
Stream |
是 | |
返回 | Stream |
返回包含这些结果的新的流 |