import React, { useState, useRef, useEffect } from 'react' import './device.scss' import UpdateBtn from './update-btn/update-btn.jsx' import ConnectItem from './connect-item/connect-item.jsx' import { DeviceClass, setSelectedDevicesStore, setExecutionStatusCallback, getExecutionStatus } from './device.js' function Device({ show }) { const [deviceList, setDeviceList] = useState([]) const deviceClass = useRef(null) const [inputValue, setInputValue] = useState('192.168.') const [portValue, setPortValue] = useState('5555') const [selectedDevices, setSelectedDevices] = useState([]) // 数组,记录所有选中的 device IP const [executionStatus, setExecutionStatus] = useState(getExecutionStatus()) if (!show) { return null } useEffect(() => { setExecutionStatusCallback((status) => setExecutionStatus(status)) return () => setExecutionStatusCallback(null) }, []) // 每次显示时同步一次执行状态,确保停止后切回设备列表时灯色为灰 useEffect(() => { if (show) setExecutionStatus(getExecutionStatus()) }, [show]) useEffect(() => { if (!deviceClass.current) { deviceClass.current = new DeviceClass() deviceClass.current.init(setDeviceList, inputValue, portValue, setSelectedDevices, setInputValue, setPortValue) } }, []) useEffect(() => { if (deviceClass.current) deviceClass.current.inputValue = inputValue }, [inputValue]) useEffect(() => { if (deviceClass.current) deviceClass.current.portValue = portValue }, [portValue]) useEffect(() => { if (deviceClass.current) deviceClass.current.currentDeviceList = deviceList }, [deviceList]) useEffect(() => { setSelectedDevicesStore(selectedDevices) }, [selectedDevices]) return ( <>
{/* 更新设备列表 */}
设备列表
deviceClass.current?.onEnableWirlessConnect()}>激活
{/* 设备列表 */}
{deviceList.map((device, index) => ( setSelectedDevices(prev => prev.includes(ip) ? prev.filter(x => x !== ip) : [...prev, ip])} onRemove={(ip) => deviceClass.current?.onRemoveDevice(ip)} /> ))}
{/* 添加设备 */}
setInputValue(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') { deviceClass.current?.onAddDevice() } }} />
setPortValue(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') { deviceClass.current?.onAddDevice() } }} />
deviceClass.current?.onAddDevice()}>
) } export default Device