# react-ui
**Repository Path**: box3lab/react-ui
## Basic Information
- **Project Name**: react-ui
- **Description**: 适用于神岛的React,完全由React驱动。
当前为实验项目。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-15
- **Last Updated**: 2025-12-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 神奇代码岛 React-UI
适用于 **神岛 Arena 客户端 UI** 的 React 渲染器,基于官方 **React 18** 渲染器实现。
参考文档:
React 18 官网:https://18.react.dev/
神岛react-ui详细教程:https://docs.box3lab.com/arenapro/zh/react/
## 安装
```sh
npm install @dao3fun/react-ui
```
导出结构:
- `@dao3fun/react-ui`
内置 UI 元素组件(`Box`、`Text`、`Image`、`Input`、`ScrollBox` 等)
- `@dao3fun/react-ui/dom`
渲染入口(`createRoot` 等)
- `@dao3fun/react-ui/hooks`
与神岛客户端交互的常用 Hook(`useScreenSize`、`useClientRemoteChannel` 等)
## 快速上手
```tsx
import React, { useState } from 'react';
import { Box, Text } from '@dao3fun/react-ui';
import { createRoot } from '@dao3fun/react-ui/dom';
function App() {
const [count, setCount] = useState(0);
return (
setCount((c: number) => c + 1)}>
你好,React!你点我了 {count} 次
);
}
// ui 由神岛客户端提供,对应根 UI 节点
const root = createRoot(ui);
root.render();
```
## 内置元素组件(Intrinsic Elements)
这些组件会通过自定义渲染器映射到对应的 神岛 UI 元素:
- `Box`:基础容器
- `Text`:文本显示(`children` 会自动映射到底层的 `textContent`)
- `Image`:图片元素(支持 `onLoad` 等事件)
- `Input`:输入框(支持 `onFocus` / `onBlur` / `onChange` 等事件)
- `ScrollBox`:可滚动容器
示例:
```tsx
import { Box, Text, Image, Input, ScrollBox } from '@dao3fun/react-ui';
```
## 神岛特有 Hooks
通过 `@dao3fun/react-ui/hooks` 提供了一些与宿主环境交互的 Hook:
- `useScreenSize()`
监听屏幕尺寸变化,返回 `{ screenWidth, screenHeight }`。
- `useClientRemoteChannel()`
客户端 <-> 服务端通信:
```ts
type ServerEvent =
| { type: 'chat'; message: string }
| { type: 'system'; code: number };
const { lastEvent, send } = useClientRemoteChannel();
```
- `usePointerLock()`
监听并控制指针锁定状态:
```ts
const { isLocked, errorCount, lockPointer, unlockPointer } = usePointerLock();
```
- `useAudio(src)`
客户端 `Audio`,提供状态机:
```ts
const { audio, status } = useAudio('https://.../bgm.mp3');
```
## TypeScript 支持
该包基于 TypeScript 编写,并提供完整的类型信息:
- 组件 props 里会自动推导底层 `UiBox` / `UiText` / `UiInput` / `UiImage` / `UiScrollBox` 类型
- 事件参数类型为 `UiEvent`,可以获得更好的开发体验
在你的项目Client中开启 JSX 支持:
```jsonc
// client/tsconfig.json
{
"compilerOptions": {
"jsx": "react",
},
}
```
## 注意事项
- 仅适用于神岛 Arena 提供的 UI 运行环境,**不能** 在普通浏览器或 Node 环境中直接渲染 DOM