58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
|
|
import { useState, useEffect } from 'react';
|
|||
|
|
|
|||
|
|
// 存储文件处理状态的共享对象
|
|||
|
|
const fileProcessingSubscribers = {
|
|||
|
|
value: false,
|
|||
|
|
listeners: new Set()
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 存储文件任务信息的共享对象
|
|||
|
|
const fileTaskSubscribers = {
|
|||
|
|
value: null,
|
|||
|
|
listeners: new Set()
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 自定义hook,用于在组件间共享文件处理任务的状态
|
|||
|
|
*/
|
|||
|
|
export default function useFileProcessingStatus() {
|
|||
|
|
const [taskFileProcessing, setTaskFileProcessing] = useState(fileProcessingSubscribers.value);
|
|||
|
|
const [task, setTask] = useState(fileTaskSubscribers.value);
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
// 添加当前组件为订阅者
|
|||
|
|
const updateProcessingState = newValue => setTaskFileProcessing(newValue);
|
|||
|
|
const updateTaskState = newTask => setTask(newTask);
|
|||
|
|
|
|||
|
|
fileProcessingSubscribers.listeners.add(updateProcessingState);
|
|||
|
|
fileTaskSubscribers.listeners.add(updateTaskState);
|
|||
|
|
|
|||
|
|
// 组件卸载时清理
|
|||
|
|
return () => {
|
|||
|
|
fileProcessingSubscribers.listeners.delete(updateProcessingState);
|
|||
|
|
fileTaskSubscribers.listeners.delete(updateTaskState);
|
|||
|
|
};
|
|||
|
|
}, []);
|
|||
|
|
|
|||
|
|
// 共享的setState函数
|
|||
|
|
const setSharedFileProcessing = newValue => {
|
|||
|
|
fileProcessingSubscribers.value = newValue;
|
|||
|
|
// 通知所有订阅者
|
|||
|
|
fileProcessingSubscribers.listeners.forEach(listener => listener(newValue));
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 共享的setTask函数
|
|||
|
|
const setSharedTask = newTask => {
|
|||
|
|
fileTaskSubscribers.value = newTask;
|
|||
|
|
// 通知所有订阅者
|
|||
|
|
fileTaskSubscribers.listeners.forEach(listener => listener(newTask));
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
taskFileProcessing,
|
|||
|
|
task,
|
|||
|
|
setTaskFileProcessing: setSharedFileProcessing,
|
|||
|
|
setTask: setSharedTask
|
|||
|
|
};
|
|||
|
|
}
|