您的位置:首页 > 其它

创建 Dojo 部件简介

2019-08-17 11:46 537 查看
原文链接:https://blog.51cto.com/14193089/2427600

基本用法
定义部件
使用 内置的 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}!}
What’s your 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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: