创建 Dojo 部件简介

基本用法
定义部件
使用 内置的 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

Hello from a Dojo widget!
;
});
设置部件属性
为了使部件能更好的复用,需要使用类型化的属性接口来抽象出 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 (


Welcome to a Dojo application!

{name &&
Hello, {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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值