Files
YG-Datasets/easy-dataset-main/hooks/useFileProcessingStatus.js

58 lines
1.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
};
}