Layout.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { AppContext } from '@/context/AppContext';
  2. import React, { useState } from 'react';
  3. import Header from '../Header/Header';
  4. import './index.scss';
  5. interface LayoutProps {
  6. children: (current: string) => React.ReactNode;
  7. }
  8. const items = [
  9. {
  10. label: '课程广场',
  11. key : 'square',
  12. },
  13. {
  14. label: '我的课程',
  15. key : 'course',
  16. },
  17. {
  18. label: '我的作业',
  19. key : 'work',
  20. },
  21. ];
  22. // 简单的三段式布局
  23. const Layout: React.FC<LayoutProps> = ({ children }) => {
  24. const [current, setCurrent] = useState(['square']);
  25. const [onSetCurrent, setOnSetCurrent] = useState<Function | null>(null);
  26. function onChange({ key }: { key: string }) {
  27. const res = current[0];
  28. if (res === 'work') {
  29. const current = () => () => {
  30. setCurrent([key]);
  31. setOnSetCurrent(null);
  32. return void 0;
  33. };
  34. // @ts-ignore
  35. setOnSetCurrent(current);
  36. return;
  37. }
  38. setCurrent([key]);
  39. }
  40. return (
  41. // 监听onSetCurrent变化出现弹出离开 调用设置
  42. <AppContext.Provider value={{ current, onSetCurrent }}>
  43. <div className="app">
  44. <Header items={items} onChange={onChange} current={current}></Header>
  45. {children(current[0])}
  46. </div>
  47. </AppContext.Provider>
  48. );
  49. };
  50. export default Layout;