创建 Dojo 部件简介

发布时间:2020-06-04 15:33:39 作者:blocklang
来源:网络 阅读:268

翻译 https://github.com/dojo/framework/blob/master/docs/en/creating-widgets/introduction.md

Dojo 鼓励编写简单的、模块化组件,并称之为部件,它仅实现应用程序大量需求中的单一职责。部件被设计成可在各种场景中组合和复用,能以响应的方式连接在一起,以满足更复杂的 web 应用程序需求。

部件使用渲染函数返回的虚拟节点描述其预期的结构。然后,在应用程序运行时,Dojo 的渲染系统会持续地将部件每一层渲染的内容转换为对应的、高效的 DOM 更新。

功能 描述
响应式设计 Dojo 部件是围绕响应式的核心原则设计的,这样在应用程序中传播变化的状态时,就可以确保可预见的、一致的行为。
封装部件 创建独立、封装的部件,这些部件可通过各种配置组合在一起,从而创建出复杂且漂亮的用户界面。
DOM 抽象 框架提供了恰当的抽象,这意味着 Dojo 应用程序不需要直接与命令式 DOM 打交道。
高效渲染 Dojo 的渲染系统可以检测出部件层次结构中特定子节点的状态变化,这样当更新发生时,只需要高效的重新渲染应用程序中受影响的部分。
企业级 跨领域的应用程序需求,如国际化、本地化和样式主题,可以轻松地添加到用户创建的部件中。

基本用法

定义部件

src/widgets/MyWidget.tsx

import { create, tsx } from '@dojo/framework/core/vdom';

const factory = create();

export default factory(function MyWidget() {
    return <div>Hello from a Dojo widget!</div>;
});

设置部件属性

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<string>('new-name') || '';
    return (
        <div>
            <div key="appBanner">Welcome to a Dojo application!</div>
            {name && <div key="nameBanner">Hello, {name}!</div>}
            <label for="nameEntry">What's your name?</label>
            <input
                id="nameEntry"
                type="text"
                value={newName}
                oninput={(e: Event) => {
                    icache.set('new-name', (e.target as HTMLInputElement).value);
                }}
            />
            <button
                onclick={() => {
                    icache.set('new-name', undefined);
                    onNameChange && onNameChange(newName);
                }}
            >
                Set my name
            </button>
        </div>
    );
});

组合部件

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<string>('current-name') || '';
    return (
        <Greeter
            name={currentName}
            onNameChange={(newName) => {
                icache.set('current-name', newName);
            }}
        />
    );
});

渲染到 DOM 中

src/main.tsx

import renderer, { tsx } from '@dojo/framework/core/vdom';

import NameHandler from './widgets/NameHandler';

const r = renderer(() => <NameHandler />);
r.mount();
推荐阅读:
  1. vue生成文件目录结构的示例分析
  2. Maven简单理解

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

dojo widget 函数部件

上一篇:Java自增自减运算符的使用方法

下一篇:mysql-5.7.18-winx64安装配置的详细操作

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》