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 ( <>