diff --git a/modern-react/my-react/package.json b/modern-react/my-react/package.json index 4f89823..7c8c27c 100644 --- a/modern-react/my-react/package.json +++ b/modern-react/my-react/package.json @@ -22,7 +22,7 @@ "react-helmet-async": "^2.0.4", "react-hook-form": "^7.51.3", "react-query": "^3.39.3", - "react-router-dom": "^6.22.3", + "react-router-dom": "^7.9.5", "react-scripts": "5.0.1", "recoil": "^0.7.7", "styled-components": "^6.1.8", diff --git a/modern-react/my-react/src/index.js b/modern-react/my-react/src/index.js index 693926c..024433a 100644 --- a/modern-react/my-react/src/index.js +++ b/modern-react/my-react/src/index.js @@ -3,131 +3,11 @@ import React, { Suspense } from 'react'; import ReactDOM from 'react-dom/client'; // 앱별 코드 가져오기 import './index.css'; -import App from './App'; + // 성능 모니터링을 위한 서비스 가져오기 import reportWebVitals from './reportWebVitals'; - -// ■■chap02■■ -import AppClass from './AppClass'; -import './chap02/class.css'; - -// // ■■chap03■■ -// import MyHello from './chap03/MyHello'; -// import EventBasic from './chap03/EventBasic'; -// import StateBasic from './chap03/StateBasic'; -// import books from './chap03/books'; -// import ForList from './chap03/ForList'; -// import ForNest from './chap03/ForNest'; -// import ForFilter from './chap03/ForFilter'; -// import ForSort from './chap03/ForSort'; -// import SelectStyle from './chap03/SelectStyle'; -// import StyledPanel from './chap03/StyledPanel'; -// import TitledPanel from './chap03/TitledPanel'; -// import ListTemplate from './chap03/ListTemplate'; -// import TypeProp, { Member } from './chap03/TypeProp'; -// import StateParent from './chap03/StateParent'; -// import EventMouse from './chap03/EventMouse'; -// import EventCompare from './chap03/EventCompare'; -// import EventError from './chap03/EventError'; -// import EventObj from './chap03/EventObj'; -// import EventPoint from './chap03/EventPoint'; -// import EventKey from './chap03/EventKey'; -// import EventArgs from './chap03/EventArgs'; -// import EventArgs2 from './chap03/EventArgs2'; -// import EventPropagation from './chap03/EventPropagation'; -// import EventOnce from './chap03/EventOnce'; -// import EventPassive from './chap03/EventPassive'; - -// // ■■chap04■■ -// import StateForm from './chap04/StateForm'; -// import StateFormUC from './chap04/StateFormUC'; -// import FormTextarea from './chap04/FormTextarea'; -// import FormSelect from './chap04/FormSelect'; -// import FormList from './chap04/FormList'; -// import FormRadio from './chap04/FormRadio'; -// import FormCheck from './chap04/FormCheck'; -// import FormCheckMulti from './chap04/FormCheckMulti'; -// import FormFile from './chap04/FormFile'; -// import StateNest from './chap04/StateNest'; -// import StateNestImmer from './chap04/StateNestImmer'; -// import StateNestImmer2 from './chap04/StateNestImmer2'; -// import StateTodo from './chap04/StateTodo'; -// import FormBasic from './chap04/FormBasic'; -// import FormYup from './chap04/FormYup'; -// import FromKorean from './chap04/FromKorean'; - -// // // ■■chap05■■ -// import LazyBasic from './chap05/LazyBasic'; -// import LazyMulti from './chap05/LazyMulti'; -// import SuspenseSimple from './chap05/SuspenseSimple'; -// import SuspenseResult from './chap05/SuspenseResult'; -// import ProfilerBasic from './chap05/ProfilerBasic'; -// import StyledComp from './chap05/StyledComp'; -// import { MyButton, MyStyledButton } from './chap05/StyledComp2'; -// import StyledCommon from './chap05/StyledCommon'; -// import GlobalStyle from './chap05/StyledGlobal'; -// import StyledProps from './chap05/StyledProps'; -// import EmotionJsx from './chap05/EmotionJsx'; -// import EmotionComp from './chap05/EmotionComp'; -// /** @jsxImportSource @emotion/react */ -// import { css, Global } from '@emotion/react'; -// import PortalBasic from './chap05/PortalBasic'; -// import ErrorRoot from './chap05/ErrorRoot'; -// import ErrorRetryRoot from './chap05/ErrorRetryRoot'; -// import ErrorEventRoot from './chap05/ErrorEventRoot'; - -// // ■■chap06■■ -// import MaterialBasic from './chap06/MaterialBasic'; -// import MaterialDrawer from './chap06/MaterialDrawer'; -// import MaterialGrid from './chap06/MaterialGrid'; -// import { CssBaseline, ThemeProvider } from '@mui/material'; -// import theme from './chap06/theme'; -// import MaterialMode from './chap06/MaterialMode'; -// import FormMui from './chap06/FormMui'; -// import QueryPre from './chap06/QueryPre'; -// import { QueryClient, QueryClientProvider } from 'react-query'; -// import QueryBasic from './chap06/QueryBasic'; -// import { ErrorBoundary } from 'react-error-boundary'; -// import QuerySuspense from './chap06/QuerySuspense'; - -// // ■■chap07■■ -// import StateEffect from './chap07/StateEffect'; -// import HookTimer from './chap07/HookTimer'; -// import HookEffect from './chap07/HookEffect'; -// import HookRefNg from './chap07/HookRefNg'; -// import HookRef from './chap07/HookRef'; -// import HookRefForward from './chap07/HookRefForward'; -// import HookCallbackRef from './chap07/HookCallbackRef'; -// import HookReducer from './chap07/HookReducer'; -// import HookReducerUp from './chap07/HookReducerUp'; -// import HookReducerInit from './chap07/HookReducerInit'; -// import HookContext from './chap07/HookContext'; -// import MyThemeProvider from './chap07/MyThemeProvider'; -// import HookThemeButton from './chap07/HookThemeButton'; -// import { RecoilRoot } from 'recoil'; -// import RecoilCounter from './chap07/RecoilCounter'; -// import RecoilTodo from './chap07/RecoilTodo'; -// import RecoilTodoUp from './chap07/RecoilTodoUp'; -// import HookMemo from './chap07/HookMemo'; -// import HookTransition from './chap07/HookTransition'; -// import HookDeferred from './chap07/HookDeferred'; -// import HookDeferredTransition from './chap07/HookDeferredTransition'; -// import HookCustom from './chap07/HookCustom'; - -// // // ■■chap08■■ -// // New Router -// import { RouterProvider } from 'react-router-dom'; -// import routesBasic from './chap08/routesBasic'; -// import routesLink from './chap08/routesLink'; -// import routesParam from './chap08/routesParam'; -// import routesHandle from './chap08/routesHandle'; -// import { HelmetProvider } from 'react-helmet-async'; -// import routesMyLink from './chap08/routesMyLink'; -// import routesScroll from './chap08/routesScroll'; - -// ■■column■■ -// import MyStore from './column/MyStore'; -/* eslint-enable no-unused-vars */ +import { RouterProvider } from 'react-router-dom'; +import routeBasic from './routesBasic'; const root = ReactDOM.createRoot(document.getElementById('root')); @@ -136,13 +16,9 @@ const root = ReactDOM.createRoot(document.getElementById('root')); // 리액트 앱(App 컴포넌트) 그리기 root.render( - - - + ); - - // Code 2-2-4 // setInterval(() => { // root.render( diff --git a/modern-react/my-react/src/routesBasic.js b/modern-react/my-react/src/routesBasic.js new file mode 100644 index 0000000..315842f --- /dev/null +++ b/modern-react/my-react/src/routesBasic.js @@ -0,0 +1,131 @@ +import { Route, createBrowserRouter, createRoutesFromElements } from 'react-router-dom'; +import App from './App'; + +// ■■chap02■■ +// import AppClass from './AppClass'; +// import './chap02/class.css'; + +// // ■■chap03■■ +// import MyHello from './chap03/MyHello'; +// import EventBasic from './chap03/EventBasic'; +// import StateBasic from './chap03/StateBasic'; +// import books from './chap03/books'; +// import ForList from './chap03/ForList'; +// import ForNest from './chap03/ForNest'; +// import ForFilter from './chap03/ForFilter'; +// import ForSort from './chap03/ForSort'; +// import SelectStyle from './chap03/SelectStyle'; +// import StyledPanel from './chap03/StyledPanel'; +// import TitledPanel from './chap03/TitledPanel'; +// import ListTemplate from './chap03/ListTemplate'; +// import TypeProp, { Member } from './chap03/TypeProp'; +// import StateParent from './chap03/StateParent'; +// import EventMouse from './chap03/EventMouse'; +// import EventCompare from './chap03/EventCompare'; +// import EventError from './chap03/EventError'; +// import EventObj from './chap03/EventObj'; +// import EventPoint from './chap03/EventPoint'; +// import EventKey from './chap03/EventKey'; +// import EventArgs from './chap03/EventArgs'; +// import EventArgs2 from './chap03/EventArgs2'; +// import EventPropagation from './chap03/EventPropagation'; +// import EventOnce from './chap03/EventOnce'; +// import EventPassive from './chap03/EventPassive'; + +// // ■■chap04■■ +// import StateForm from './chap04/StateForm'; +// import StateFormUC from './chap04/StateFormUC'; +// import FormTextarea from './chap04/FormTextarea'; +// import FormSelect from './chap04/FormSelect'; +// import FormList from './chap04/FormList'; +// import FormRadio from './chap04/FormRadio'; +// import FormCheck from './chap04/FormCheck'; +// import FormCheckMulti from './chap04/FormCheckMulti'; +// import FormFile from './chap04/FormFile'; +// import StateNest from './chap04/StateNest'; +// import StateNestImmer from './chap04/StateNestImmer'; +// import StateNestImmer2 from './chap04/StateNestImmer2'; +// import StateTodo from './chap04/StateTodo'; +// import FormBasic from './chap04/FormBasic'; +// import FormYup from './chap04/FormYup'; +// import FromKorean from './chap04/FromKorean'; + +// // // ■■chap05■■ +// import LazyBasic from './chap05/LazyBasic'; +// import LazyMulti from './chap05/LazyMulti'; +// import SuspenseSimple from './chap05/SuspenseSimple'; +// import SuspenseResult from './chap05/SuspenseResult'; +// import ProfilerBasic from './chap05/ProfilerBasic'; +// import StyledComp from './chap05/StyledComp'; +// import { MyButton, MyStyledButton } from './chap05/StyledComp2'; +// import StyledCommon from './chap05/StyledCommon'; +// import GlobalStyle from './chap05/StyledGlobal'; +// import StyledProps from './chap05/StyledProps'; +// import EmotionJsx from './chap05/EmotionJsx'; +// import EmotionComp from './chap05/EmotionComp'; +// /** @jsxImportSource @emotion/react */ +// import { css, Global } from '@emotion/react'; +// import PortalBasic from './chap05/PortalBasic'; +// import ErrorRoot from './chap05/ErrorRoot'; +// import ErrorRetryRoot from './chap05/ErrorRetryRoot'; +// import ErrorEventRoot from './chap05/ErrorEventRoot'; + +// // ■■chap06■■ +import MaterialBasic from './chap06/MaterialBasic'; +import MaterialDrawer from './chap06/MaterialDrawer'; +import MaterialGrid from './chap06/MaterialGrid'; +import { CssBaseline, ThemeProvider } from '@mui/material'; +import theme from './chap06/theme'; +import MaterialMode from './chap06/MaterialMode'; +import FormMui from './chap06/FormMui'; +import QueryPre from './chap06/QueryPre'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import QueryBasic from './chap06/QueryBasic'; +import { ErrorBoundary } from 'react-error-boundary'; +import QuerySuspense from './chap06/QuerySuspense'; + +// // ■■chap07■■ +// import StateEffect from './chap07/StateEffect'; +// import HookTimer from './chap07/HookTimer'; +// import HookEffect from './chap07/HookEffect'; +// import HookRefNg from './chap07/HookRefNg'; +// import HookRef from './chap07/HookRef'; +// import HookRefForward from './chap07/HookRefForward'; +// import HookCallbackRef from './chap07/HookCallbackRef'; +// import HookReducer from './chap07/HookReducer'; +// import HookReducerUp from './chap07/HookReducerUp'; +// import HookReducerInit from './chap07/HookReducerInit'; +// import HookContext from './chap07/HookContext'; +// import MyThemeProvider from './chap07/MyThemeProvider'; +// import HookThemeButton from './chap07/HookThemeButton'; +// import { RecoilRoot } from 'recoil'; +// import RecoilCounter from './chap07/RecoilCounter'; +// import RecoilTodo from './chap07/RecoilTodo'; +// import RecoilTodoUp from './chap07/RecoilTodoUp'; +// import HookMemo from './chap07/HookMemo'; +// import HookTransition from './chap07/HookTransition'; +// import HookDeferred from './chap07/HookDeferred'; +// import HookDeferredTransition from './chap07/HookDeferredTransition'; +// import HookCustom from './chap07/HookCustom'; + +// // // ■■chap08■■ +// // New Router +// import { RouterProvider } from 'react-router-dom'; +// import routesBasic from './chap08/routesBasic'; +// import routesLink from './chap08/routesLink'; +// import routesParam from './chap08/routesParam'; +// import routesHandle from './chap08/routesHandle'; +// import { HelmetProvider } from 'react-helmet-async'; +// import routesMyLink from './chap08/routesMyLink'; +// import routesScroll from './chap08/routesScroll'; + +// ■■column■■ +// import MyStore from './column/MyStore'; +/* eslint-enable no-unused-vars */ + + +const routesBasic = createBrowserRouter([ + { path: '/', element: } +]) + +export default routesBasic; \ No newline at end of file