diff --git a/06_react/unterricht/tag36/01_components-with-hooks/src/App.jsx b/06_react/unterricht/tag36/01_components-with-hooks/src/App.jsx index 36b1aba..0e6b69f 100644 --- a/06_react/unterricht/tag36/01_components-with-hooks/src/App.jsx +++ b/06_react/unterricht/tag36/01_components-with-hooks/src/App.jsx @@ -3,6 +3,9 @@ import FooterMain from './components/footers/FooterMain'; import ExampleUseState from './components/examples/ExampleUseState'; import ExampleUseReducer from './components/examples/ExampleUseReducer'; +import ThemeProvider from './components/examples/theme-switcher/ThemeProvider'; +import ExampleUseContext from './components/examples/ExampleUseContext'; +import ExampleUseId from './components/examples/ExampleUseId'; function App() { return ( @@ -25,6 +28,23 @@ function App() {

Components with hooks


+

Example useId

+ + + +
+

Example useContext

+ +
+
+ +
+
+ + + +
+

Example useReducer


diff --git a/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/ExampleUseContext.jsx b/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/ExampleUseContext.jsx new file mode 100644 index 0000000..66c0a02 --- /dev/null +++ b/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/ExampleUseContext.jsx @@ -0,0 +1,18 @@ +import { useContext } from 'react'; +import ThemeContext from './theme-switcher/ThemeContext'; + +const ExampleUseContext = (props) => { + // const { } = props; + + const theme = useContext(ThemeContext); + + return ( +
+

useContext

+

+ The theme of this component is: {theme} +

+
+ ); +}; +export default ExampleUseContext; diff --git a/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/ExampleUseId.jsx b/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/ExampleUseId.jsx new file mode 100644 index 0000000..d58a7d2 --- /dev/null +++ b/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/ExampleUseId.jsx @@ -0,0 +1,21 @@ +import { useId } from 'react'; +// import { v4 as uid} from 'uuid'; +const ExampleUseId = (props) => { + // const { } = props; + + const id = useId().replaceAll(/[_r.]/g, ''); + // const id = uid(); // von uuid ⇨ 'b18794e8-5d0d-417c-b361-ba38e78411b4' + + return ( +
+

+ ID: {id} +

+
+ + +
+
+ ); +}; +export default ExampleUseId; diff --git a/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/theme-switcher/ThemeContext.jsx b/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/theme-switcher/ThemeContext.jsx new file mode 100644 index 0000000..dda5e98 --- /dev/null +++ b/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/theme-switcher/ThemeContext.jsx @@ -0,0 +1,8 @@ +import { createContext } from 'react'; + +export const THEME_DEFAULT_VALUE = 'light'; + +const ThemeContext = createContext(THEME_DEFAULT_VALUE); +// createContext -> JSX-Element mit value Attribut +// ... +export default ThemeContext; diff --git a/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/theme-switcher/ThemeProvider.jsx b/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/theme-switcher/ThemeProvider.jsx new file mode 100644 index 0000000..fa141c5 --- /dev/null +++ b/06_react/unterricht/tag36/01_components-with-hooks/src/components/examples/theme-switcher/ThemeProvider.jsx @@ -0,0 +1,25 @@ +import { useState } from 'react'; +import ThemeContext, { THEME_DEFAULT_VALUE } from './ThemeContext'; + +const ThemeProvider = (props) => { + const { children } = props; + + console.log(ThemeContext._currentValue); // 'light' <- _currentValue beinhaltet initialWert. Soll aber in production Umgebung nicht verwendet werden, da kein offizieller Standard. + + const [theme, setTheme] = useState(THEME_DEFAULT_VALUE); + + const handleToggleTheme = (e) => { + console.log('toggle theme'); + setTheme((prevState) => (prevState === 'light' ? 'dark' : 'light')); + }; + + return ( + + + {children} + + ); +}; +export default ThemeProvider;