基本用法
定义部件
使用 内置的 create() 将部件定义为一个渲染函数 factory
返回定义了部件结构的 虚拟 DOM 节点,这里使用 TSX 语法
src/widgets/MyWidget.tsx
import { create, tsx } from ‘@dojo/framework/core/vdom’;
const factory = create();
export default factory(function MyWidget() {
return
});
设置部件属性
为了使部件能更好的复用,需要使用类型化的属性接口来抽象出 state, 配置和事件处理函数
使用 create 工厂为部件提供中间件
通过为节点指定 key 属性,来区分同一类型的兄弟元素,此示例中是两个 div 元素。这样当应用程序中的状态发生变化,需要更新 DOM 节点时,框架就可以高效、准确地定位到相关元素
src/widgets/Greeter.tsx
import { create, tsx } from ‘@dojo/framework/core/vdom’;
import icache from ‘@dojo/framework/core/middleware/icache’;
const factory = create({ icache }).properties<{
name: string;
onNameChange?(newName: string): void;
}>();
export default factory(function Greeter({ middleware: { icache }, properties }) {
const { name, onNameChange } = properties();
let newName = icache.get(‘new-name’) || ‘’;
return (
{name &&
<input
id=“nameEntry”
type=“text”
value={newName}
οninput={(e: Event) => {
icache.set(‘new-name’, (e.target as HTMLInputElement).value);
}}
/>
<button
οnclick={() => {
icache.set(‘new-name’, undefined);
onNameChange && onNameChange(newName);
}}
>
Set my name
);
});
组合部件
通过将部件组合在一起形成多层结构,以满足更复杂的应用程序需求
为子部件提供 state 和事件处理函数等属性(properties)
使用 icache 中间件管理 state,并当状态变更时,失效或重新渲染受影响的部件
src/widgets/NameHandler.tsx
import { create, tsx } from ‘@dojo/framework/core/vdom’;
import icache from ‘@dojo/framework/core/middleware/icache’;
import Greeter from ‘./Greeter’;
const factory = create({ icache });
export default factory(function NameHandler({ middleware: { icache } }) {
let currentName = icache.get(‘current-name’) || ‘’;
return (
<Greeter
name={currentName}
onNameChange={(newName) => {
icache.set(‘current-name’, newName);
}}
/>
);
});
渲染到 DOM 中
使用框架中的 renderer 函数将部件挂载到 DOM 中
也可以对 Dojo 应用程序在页面中呈现的位置做更多控制,以便稳步地采用较小的子组件,甚至支持一个页面中存在多个应用程序或框架
src/main.tsx
import renderer, { tsx } from ‘@dojo/framework/core/vdom’;
import NameHandler from ‘./widgets/NameHandler’;
const r = renderer(() => );
r.mount();
深圳网站建设www.sz886.com