ClassroomProvider.tsx 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. import React, { useState, useEffect, useRef, createContext, useContext } from 'react';
  2. import { useClassroom , Role } from './useClassroom.ts';
  3. type ClassroomContextType = ReturnType<typeof useClassroom>;
  4. const ClassroomContext = createContext<ClassroomContextType | null>(null);
  5. export const ClassroomProvider: React.FC<{children: React.ReactNode}> = ({ children }) => {
  6. const classroom = useClassroom();
  7. useEffect(() => {
  8. // 解析URL参数中的classId
  9. const params = new URLSearchParams(window.location.search);
  10. const classId = params.get('classId');
  11. if (classId) {
  12. classroom.setClassId(classId);
  13. classroom.setRole(Role.Student);
  14. }
  15. }, []);
  16. return (
  17. <ClassroomContext.Provider value={classroom}>
  18. {children}
  19. </ClassroomContext.Provider>
  20. );
  21. };
  22. export const useClassroomContext = () => {
  23. const context = useContext(ClassroomContext);
  24. if (!context) {
  25. throw new Error('useClassroomContext must be used within a ClassroomProvider');
  26. }
  27. return context;
  28. };