import React from 'react'; import { View, Text, Alert } from 'react-native'; import { Radio, Toast, Button, Size } from '@xrnjs/ui'; import styles from './style'; const EventHandling: React.FC = () => { const [eventLog, setEventLog] = React.useState([]); const [validationValue, setValidationValue] = React.useState(); const [asyncValue, setAsyncValue] = React.useState(); const [loading, setLoading] = React.useState(false); const addLog = (message: string) => { const timestamp = new Date().toTimeString().slice(0, 8); setEventLog((prev) => [`[${timestamp}] ${message}`, ...prev.slice(0, 4)]); }; const handleValidationChange = (value: number | number[]) => { if (Array.isArray(value)) return; if (value === 3) { Toast({ position: 'middle', message: '此选项需要管理员权限', forbidPress: true, }); return; } setValidationValue(value); addLog(`验证通过,选择了选项 ${value}`); }; const handleAsyncChange = async (value: string | string[]) => { if (Array.isArray(value)) return; setLoading(true); addLog(`开始异步处理: ${value}`); try { // 模拟异步操作 await new Promise((resolve) => setTimeout(resolve, 2000)); setAsyncValue(value); addLog(`异步处理完成: ${value}`); } catch (error) { addLog(`异步处理失败: ${error}`); } finally { setLoading(false); } }; const onDisabledPress = (option: any) => { Alert.alert('操作提示', `${option.label} 当前不可选择`, [ { text: '确定', style: 'default' }, ]); addLog(`尝试点击禁用项: ${option.label}`); }; return ( <> 事件监听 监听选择变化事件 { const selectedOption = options.find((opt) => opt.value === value); addLog(`选择了: ${selectedOption?.label} (值: ${value})`); }} /> 禁用项处理 点击禁用项时的处理 { addLog(`正常选择: ${value}`); }} onDisabledPress={onDisabledPress} /> 选择验证 选择前进行验证 value={validationValue} onChange={handleValidationChange} options={[ { label: '普通用户', value: 1 }, { label: '高级用户', value: 2 }, { label: '管理员 (需要权限)', value: 3 }, ]} /> {validationValue && ( ✓ 已选择: 选项 {validationValue} )} 异步处理 选择后进行异步操作 value={asyncValue} onChange={handleAsyncChange} options={[ { label: '保存到本地', value: 'local' }, { label: '上传到云端', value: 'cloud' }, { label: '同步到服务器', value: 'server' }, ]} /> {loading && ( ⏳ 正在处理中... )} {asyncValue && !loading && ( ✓ 处理完成: {asyncValue} )} 事件日志 {eventLog.length === 0 ? ( 暂无事件记录 ) : ( eventLog.map((log, index) => ( {log} )) )} ); }; export default EventHandling;