logo
Zess
指南
API
演练场
English
简体中文
指南
API
演练场
English
简体中文
logo
Zess

开始

介绍
快速开始

核心功能

响应性基础
生命周期
内置组件
响应性工具类
Store 工具类
次要 API
渲染
特殊 JSX 属性

路由系统

内置组件
基础 API
📝 在 GitHub 上编辑此页
上一页渲染
下一页内置组件

#特殊 JSX 属性

#class

class 属性用于设置元素的 CSS 类名,className 是其别名。它支持字符串值和布尔对象两种格式,用于动态类管理。使用对象格式时,键代表各个类名(可以是多个空格分隔的类),布尔值决定是否应用每个类。需要注意的是,class 是一个编译时伪属性,这意味着它在展开操作中无法使用,如 <div {...props} />,此时类名需要显式指定。

示例:

// 字符串格式 - 静态类名
<div class="btn btn-primary">Click me</div>

// 对象格式 - 使用信号的动态类名
<div class={{
  'btn': true,
  'btn-primary': type() === 'primary',
  'btn-disabled': isDisabled(),
  'active': isActive()
}}>
  Dynamic Button
</div>

#style

style 属性使用字符串或样式对象来应用内联 CSS 样式。与 React 不同,Zess 使用原生的 element.style.setProperty 方法,需要使用标准的带连字符的小写 CSS 属性名(例如 background-color 而不是 backgroundColor)。这种方法具有性能优势,并完全支持 CSS 自定义属性。

示例:

// 字符串格式 - 传统样式声明
<div style="color: blue; font-size: 16px">
  Static styles
</div>

// 对象格式 - 使用信号和 CSS 变量
<div style={{
  'color': 'blue',
  'font-size': fontSize() + 'px',
  'background-color': getBgColor(),
  'border': '1px solid var(--primary-color)'
}}>
  Dynamic styles
</div>

#innerHTML

innerHTML 属性直接在元素内部设置 HTML 内容,与原生的 DOM 属性一致。这允许插入格式化的内容,但需要谨慎使用,因为如果用于不受信任的内容,可能会使应用程序面临跨站脚本(XSS)攻击的风险。

示例:

// 来自信号的动态 HTML
<div innerHTML={sanitizedContent()}></div>

// 静态 HTML 内容
<div innerHTML="<span class='highlight'>Important</span>"></div>

#textContent

textContent 属性为元素设置纯文本内容,等同于同名的 DOM 属性。它也接受 innerText 作为别名。与 innerHTML 不同,它将内容视为纯文本且不解析 HTML,从而避免 XSS 漏洞。

示例:

// 来自信号的基础文本
<div textContent={message()}></div>

// 使用 innerText 别名
<div innerText={userName() + "'s Profile"}></div>

// 纯文本内容
<div textContent="Simple text display"></div>

#on___

Zess 中的事件处理器根据命名约定遵循两种不同的模式。小写名称如 onclick 使用原生 DOM 0 级事件绑定,直接将处理器附加到元素上。大写名称如 onClick 则采用事件委托,事件在文档根级别通过事件冒泡(或对不冒泡的事件使用事件捕获)进行处理,这在动态应用中显著提升了性能。事件绑定一次后保持静态,currentTarget 指向绑定元素,target 标识实际的事件源。

示例:

// 原生 DOM 0 级绑定(小写)
<button onclick={() => handleClick()}>
  Native Event
</button>

// 委托绑定(大写)
<button onClick={(e) => handleDelegatedClick(e)}>
  Delegated Event
</button>

// 带信号的表单事件
<input
  onInput={(e) => setValue(e.target.value)}
  onChange={(e) => saveValue(e.target.value)}
/>

#ref

ref 属性在 JSX 流中提供对底层 DOM 元素的直接访问。它支持两种使用模式:变量赋值(元素自动赋值给指定变量)和函数回调(在元素挂载时接收元素实例)。当应用于自定义组件时,必须使用 props.ref 将 ref 显式转发到一个 DOM 元素。

示例:

// 变量赋值 - 元素自动赋值给 myDiv
let myDiv
// 使用 onMount 在组件渲染后访问 DOM 元素
onMount(() => console.log(myDiv))
// 元素挂载时将被赋值给 myDiv
<div ref={myDiv}>Content</div>

// 函数回调 - 在挂载时调用并传入元素实例
<input
  ref={(el) => el.focus()}
  value={text()}
/>

// 在另一个组件中使用组件引用
function ParentComponent() {
  let myComp
  // 在挂载后访问组件引用
  onMount(() => console.log(myComp))
  return <MyComponent ref={myComp} />
}

// 在 MyComponent 实现内部 - 将 ref 转发到 DOM 元素
function MyComponent(props) {
  return <div ref={props.ref}>Component content</div>
}