Skip to content

视图

视图是一个函数,它渲染一部分页面。

它往往被用于拆分页面或复用页面重复出现的部分。

使用方式

myView.ts

ts
import { $view } from "refina";

export default $view(_ => {
  _.span("my view");
});

app.ts

ts
import MyView from "./MyView.ts";

$app([], _ => {
  _(MyView)();
  _.div(MyView.$func);
});

渲染结果

html
<div>
  <span>my view</span>
</div>
<span>my view</span>

$view API

$view 函数用于定义一个视图。

推荐将较大的视图编写在一个单独的文件中,并将这个视图作为默认导出。

传入视图参数

A view can have parameters:

ts
import { $view, _ } from "refina";

export default $view((name: string, id?: number) => {
  _.p(_ => {
    _.t`My name is ${name}. `;
    id !== undefined && _.t(`My ID is ${id}.`);
  });
});

Then, you can pass the parameters to the view:

ts
_(MyView)("John", 123);
_(MyView)("Mary");

视图的状态

视图可以有状态,但是这些状态不属于视图,而是属于模块,它在所有使用它的视图中共享。

ts
let count = 0;

export default $view(_ => {
  _.p(`Count is: ${count}`);
  _.button(`Add`) && count++;
});

WARNING

因为状态在所有使用它的视图中共享,需要小心使用它们。

视图与组件的区别

视图可以被看做组件的简化版本。

它们的主要不同有:

  • 组件被注册为上下文对象中的函数,而视图只是一个普通的函数。
  • 每个组件实例有它专属的状态,而视图没有。
  • 组件有 $primaryEl 属性,并且可以向它添加类名和样式;视图则不行。
  • 组件可以通过 _.$ref 指令引用其实例,而视图不行,因为视图没有实例。
  • 组件可以有额外的 props,但是视图没有,视图只有普通的函数参数。

如何选择

If you want to reuse a view function of the page, you should use a view.

如果你想复用有状态的代码,你需要使用_组件_。

如果你是**UI 库(组件库)**作者,你总是应当提供_组件_。