<StrictMode>
<StrictMode> γ―γιηΊη°ε’γ«γγγ¦γ³γ³γγΌγγ³γοΏ½?δΈθ¬ηγͺγγ°γζ©ζγ«θ¦γ€γγοΏ½?γ«ε½Ήη«γ‘γΎγγ
<StrictMode>
<App />
</StrictMode>- γͺγγ‘γ¬γ³γΉ
- δ½Ώη¨ζ³
- γ’γγͺε ¨δ½γ§ Strict Mode γζεΉγ«γγ
- γ’γγͺοΏ½?δΈι¨γ§ Strict Mode γζεΉγ«γγ
- ιηΊδΈοΏ½?δΊιγ¬γ³γγΌγ«γγ£γ¦θ¦γ€γγ£γγγ°οΏ½?οΏ½?ζ£
- ιηΊδΈγ«γ¨γγ§γ―γγεοΏ½?οΏ½θ‘γγ¦θ¦γ€γγ£γγγ°οΏ½?οΏ½?ζ£
- Strict Mode γ«γγ£γ¦ζεΉεγγγιζ¨ε₯¨θ¦εοΏ½?οΏ½?ζ£
γͺγγ‘γ¬γ³γΉ
<StrictMode>
StrictMode γδ½Ώη¨γγ¦γε
ε΄οΏ½?γ³γ³γγΌγγ³γγγͺγΌγ«ε―Ύγγ¦ιηΊζε°η¨οΏ½?ζεγ¨θ¦εγζεΉγ«γγΎγγ
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
const root = createRoot(document.getElementById('root'));
root.render(
<StrictMode>
<App />
</StrictMode>
);Strict Mode γ§γ―γδ»₯δΈοΏ½?γγγͺιηΊζε°η¨οΏ½?ζεγζεΉγ«γͺγγΎγγ
- γ³γ³γγΌγγ³γγ―γη΄η²γ§γͺγ (impure) γ¬γ³γγΌγ«γγ£γ¦εΌγθ΅·γγγγγγ°γθ¦γ€γγγγγ«γγ¬γ³γγΌγθΏ½ε γ§ 1 εθ‘γγΎγγ
- γ³γ³γγΌγγ³γγ―γγ¨γγ§γ―γοΏ½?γ―γͺγΌγ³γ’γγγεΏγγ«γγγγ°γθ¦γ€γγγγγ«γγ¨γγ§γ―γοΏ½?οΏ½?οΏ½θ‘γθΏ½ε γ§ 1 εθ‘γγΎγγ
- γ³γ³γγΌγγ³γγιζ¨ε₯¨οΏ½? API γδ½Ώη¨γγ¦γγͺγγγγ§γγ―γγΎγγ
props
StrictMode γ― props γεγδ»γγΎγγγ
注ζηΉ
- δΈζ¦
<StrictMode>γ§γ©γγγγγγγͺγΌε γ§ Strict Mode γη‘εΉεγγζΉζ³γ―γγγΎγγγγγγ«γγγ<StrictMode>ε οΏ½?γγΉγ¦οΏ½?γ³γ³γγΌγγ³γγγγ§γγ―γγγ¦γγγγ¨γη’ΊδΏ‘γ§γγΎγγγγγγγγ―γε γ§γγγ§γγ―γ«δΎ‘ε€γγγγ¨ζγγγγ©γγγ«ι’γγ¦ 2 γ€οΏ½?γγΌγ οΏ½?ζθ¦γε²γγε ΄εγεζγ«ιγγγγγγγγ―<StrictMode>γγγͺγΌοΏ½?δΈε΄γΈη§»εγγεΏ θ¦γγγγΎγγ
δ½Ώη¨ζ³
γ’γγͺε ¨δ½γ§ Strict Mode γζεΉγ«γγ
Strict Mode γ―γ<StrictMode> γ³γ³γγΌγγ³γε
οΏ½?ε
¨γ³γ³γγΌγγ³γγγͺγΌγ«ε―Ύγγ¦θΏ½ε οΏ½?ιηΊζε°η¨γγ§γγ―γζεΉγ«γγΎγγγγγοΏ½?γγ§γγ―γ―γιηΊγγγ»γΉοΏ½?ζ©γοΏ½?οΏ½ιγ§γ³γ³γγΌγγ³γοΏ½?δΈθ¬ηγͺγγ°γθ¦γ€γγοΏ½?γ«ε½Ήη«γ‘γΎγγ
γ’γγͺε
¨δ½γ§ Strict Mode γζεΉγ«γγγ«γ―γγ«γΌγγ³γ³γγΌγγ³γγγ¬γ³γγΌγγιγ«γγγ <StrictMode> γ§γ©γγγγΎγγ
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
const root = createRoot(document.getElementById('root'));
root.render(
<StrictMode>
<App />
</StrictMode>
);ηΉγ«ζ°γγδ½ζγγγγ’γγͺγ«γ€γγ¦γ―γγ’γγͺε
¨δ½γ Strict Mode γ§γ©γγγγγγ¨γγε§γγγΎγγcreateRoot οΏ½?εΌγ³εΊγγθͺεηγ«θ‘γγγ¬γΌγ γ―γΌγ―γδ½Ώη¨γγ¦γγε ΄εγ―γγγγ₯γ‘γ³γγΌγ·γ§γ³γεη
§γγ¦ Strict Mode γζεΉγ«γγζΉζ³γη’Ίθͺγγ¦γγ γγγ
Strict Mode οΏ½?γγ§γγ―γ―ιηΊδΈγ«οΏ½?γΏοΏ½?οΏ½θ‘γγγγοΏ½?γ§γγγγγγγ―ζ’γ«γ³γΌγε γ«εε¨γγγζ¬ηͺη°ε’γ§οΏ½?η’ΊοΏ½?οΏ½γͺεηΎγι£γγγγ°γθ¦γ€γγοΏ½?γ«ε½Ήη«γ‘γΎγγStrict Mode γδ½Ώη¨γγγγ¨γ§γγγ°γγ¦γΌγΆγε ±εγγ¦γγεγ«οΏ½?ζ£γγγγ¨γγ§γγΎγγ
γ’γγͺοΏ½?δΈι¨γ§ Strict Mode γζεΉγ«γγ
γ’γγͺγ±γΌγ·γ§γ³οΏ½?δ»»ζοΏ½?δΈι¨εγ§οΏ½?γΏ Strict Mode γζεΉγ«γγγγ¨γε―θ½γ§γγ
import { StrictMode } from 'react';
function App() {
return (
<>
<Header />
<StrictMode>
<main>
<Sidebar />
<Content />
</main>
</StrictMode>
<Footer />
</>
);
}δΈθ¨οΏ½?δΎγ§γ―γStrict Mode οΏ½?γγ§γγ―γ― Header γ¨ Footer γ³γ³γγΌγγ³γγ«ε―Ύγγ¦γ―οΏ½?οΏ½θ‘γγγΎγγγγγγγSidebar γ¨ Contentγγγγ³γγγοΏ½?δΈγ«γγγγΉγ¦οΏ½?γ³γ³γγΌγγ³γγ«ε―Ύγγ¦γ―γγ©γγ γζ·±γγ¨γγγ«γγ£γ¦γγγ§γγ―γοΏ½?οΏ½θ‘γγγΎγγ
ιηΊδΈοΏ½?δΊιγ¬γ³γγΌγ«γγ£γ¦θ¦γ€γγ£γγγ°οΏ½?οΏ½?ζ£
React γ―γγγͺγοΏ½?ζΈγγγΉγ¦οΏ½?γ³γ³γγΌγγ³γγη΄ι’ζ° (pure function) γ§γγγ¨οΏ½?οΏ½?οΏ½γγ¦γγΎγγγγγ―γγγͺγγζΈγ React γ³γ³γγΌγγ³γγ―γεγε ₯εοΌpropsγstateγcontextοΌγδΈγγγγε ΄εγ«εΈΈγ«εγ JSX γθΏγγͺγγγ°γͺγγͺγγ¨γγζε³γ§γγ
γοΏ½?γ«γΌγ«γοΏ½?οΏ½γγͺγγ³γ³γγΌγγ³γγ―δΊζΈ¬δΈθ½γͺζεγη€Ίγγγγ°γεΌγθ΅·γγγΎγγγγ£γγη΄η²γ§γͺγγͺγ£γ¦γγΎγ£γγ³γΌγγθ¦γ€γγγγγ«γStrict Mode γ―γγͺγοΏ½?ι’ζ°οΏ½?δΈι¨οΌη΄η²γ§γγγΉγγοΏ½?γ γοΌγιηΊδΈγ« 2 εεΌγ³εΊγγΎγγγγγ«γ―δ»₯δΈγε«γΎγγΎγγ
- γγͺγοΏ½?γ³γ³γγΌγγ³γι’ζ°ζ¬δ½οΌγγγγ¬γγ«οΏ½?γγΈγγ―οΏ½?γΏγγ€γγ³γγγ³γγ©ε οΏ½?γ³γΌγγ―ε«γΎγγΎγγγοΌ
useStateγsetι’ζ°γuseMemoγγγγ³useReducerγ«ζΈ‘γι’ζ°constructorγrenderγshouldComponentUpdateγͺγ©οΏ½?δΈι¨οΏ½?γ―γ©γΉγ³γ³γγΌγγ³γγ‘γ½γγοΌε ¨γͺγΉγγθ¦γοΌ
ι’ζ°γη΄η²γ§γγγ°γη΅ζγ―ζ―εεγγ«γͺγοΏ½?γ§γ2 εοΏ½?οΏ½θ‘γγ¦γγοΏ½?ζ―γθγγ―ε€γγγΎγγγγγγγι’ζ°γη΄η²γ§γͺγοΌδΎγγ°γεγεγ£γγγΌγΏγζΈγζγγ¦γγοΌε ΄εγ2 εοΏ½?οΏ½θ‘γγγγ¨γ§οΏ½?γ«θ¦γγε½±ιΏγεΊγοΌγΎγγ«γγγη΄η²γ§γͺγγ¨γγγγ¨γ§γοΌοΌεΎεγγγγΎγγγγγ«γγγγγ°γζ©ζγ«θ¦γ€γγ¦οΏ½?ζ£γγοΏ½?γ«ε½Ήη«γ‘γΎγγ
δ»₯δΈγ―γStrict Mode γ§οΏ½?δΊιγ¬γ³γγΌγγ©οΏ½?γγγ«ζ©ζγ«γγ°γθ¦γ€γγοΏ½?γ«ε½Ήη«γ€γγη€ΊγδΎγ§γγ
γοΏ½? StoryTray γ³γ³γγΌγγ³γγ― stories οΏ½?ι
εγεγεγγγοΏ½?ζεΎγ« βCreate Storyβ γ¨γγι
οΏ½?γε γγ¦θ‘¨η€ΊγγΎγγ
export default function StoryTray({ stories }) { const items = stories; items.push({ id: 'create', label: 'Create Story' }); return ( <ul> {items.map(story => ( <li key={story.id}> {story.label} </li> ))} </ul> ); }
δΈθ¨οΏ½?γ³γΌγγ«γ―ιιγγγγγΎγγγγγγεεοΏ½?εΊεγ―ζ£γγθ¦γγγγγοΏ½?οΏ½ζγ«θ¦θ½γ¨γγ¦γγΎγγΎγγ
StoryTray γ³γ³γγΌγγ³γγθ€ζ°εγ¬γ³γγΌγγγγ¨γοΏ½?ιιγγ«ζ°δ»γγγγγͺγγΎγγδΎγγ°γγγ¦γΉγ StoryTray οΏ½?δΈγ«γγγΌγγγ¨θζ―θ²γε€γγ¦ StoryTray γεγ¬γ³γγΌγγγγγγ«γγ¦γΏγΎγγγγ
import { useState } from 'react'; export default function StoryTray({ stories }) { const [isHover, setIsHover] = useState(false); const items = stories; items.push({ id: 'create', label: 'Create Story' }); return ( <ul onPointerEnter={() => setIsHover(true)} onPointerLeave={() => setIsHover(false)} style={{ backgroundColor: isHover ? '#ddd' : '#fff' }} > {items.map(story => ( <li key={story.id}> {story.label} </li> ))} </ul> ); }
StoryTray γ³γ³γγΌγγ³γοΏ½?δΈγ«γγ¦γΉγγγγΌγγγγ³γ«γβCreate Storyβ γεεΊ¦γͺγΉγγ«θΏ½ε γγγγγ¨γ«ζ³¨ζγγ¦γγ γγγγ³γΌγοΏ½?ζε³γ―γζεΎγ«δΈεΊ¦γ γθΏ½ε γγγγ¨γ§γγγγγγγStoryTray γ― props οΏ½? stories ι
εγη΄ζ₯ζΈγζγγ¦γγΎγγStoryTray γγ¬γ³γγΌγγγγγ³γ«γεγι
εοΏ½?ζεΎγ« βCreate Storyβ γεγ³θΏ½ε γγ¦γγΎγγγ€γΎγγStoryTray γ―η΄ι’ζ°γ§γ―γͺγγθ€ζ°εοΏ½?οΏ½θ‘γγγγ¨γ§η°γͺγη΅ζγθΏγ£γ¦γγΎγγ
γοΏ½?ει‘γθ§£ζ±Ίγγγγγ«γ―γι εοΏ½?γ³γγΌγδ½γγε οΏ½?ι εοΏ½?代γγγ«γοΏ½?γ³γγΌγζΈγζγγγγγ«γ§γγΎγγ
export default function StoryTray({ stories }) {
const items = stories.slice(); // Clone the array
// β
Good: Pushing into a new array
items.push({ id: 'create', label: 'Create Story' });γγγ«γγγStoryTray ι’ζ°γ―η΄ι’ζ°γ«γͺγγΎγγεΌγ³εΊγγγγγ³γ«γζ°γγι
εοΏ½?γ³γγΌγ γγζΈγζγγγε€ι¨οΏ½?γͺγγΈγ§γ―γγε€ζ°γ«γ―ε½±ιΏγδΈγγΎγγγγγγ«γγγγ°γ―οΏ½?ζ£γγγΎγγγγζ―γθγγ«ει‘γγγγγ¨γ«ζ°δ»γγγγγ«γͺγεγ«γγ³γ³γγΌγγ³γγιεΈΈγγε€γεγ¬γ³γγΌγγεΏ
θ¦γγγγΎγγγ
γοΏ½?δΎγ§γ―γγγ°γζγγγ§γ―γγγΎγγγ§γγγγ§γ―γε
οΏ½?οΌγγ°γγγοΌγ³γΌγγ <StrictMode> γ§γ©γγγγ¦γΏγΎγγγοΌ
export default function StoryTray({ stories }) { const items = stories; items.push({ id: 'create', label: 'Create Story' }); return ( <ul> {items.map(story => ( <li key={story.id}> {story.label} </li> ))} </ul> ); }
Strict Mode γ―εΈΈγ«γ¬γ³γγΌι’ζ°γ 2 εεΌγ³εΊγγγγγγγ«ιιγ£γη΅ζγοΏ½?γ«ε ₯γγΎγοΌβCreate Storyβ γ 2 ε葨瀺γγγΎγοΌγγγγ«γγγζ©ζγ«γοΏ½?γγγͺιιγγ«ζ°γ₯γγγ¨γγ§γγΎγγStrict Mode γ§γ³γ³γγΌγγ³γγγ¬γ³γγΌγγγγγ«γγγγ¨γ§γε γ»γ©οΏ½?γγγΌζ©θ½οΏ½?γγγͺγε°ζ₯ζ¬ηͺη°ε’γ§ηΊηγγγε€γοΏ½?γγ°γγγγγγγζ½°γγ¦γγγοΏ½?γ§γγ
import { useState } from 'react'; export default function StoryTray({ stories }) { const [isHover, setIsHover] = useState(false); const items = stories.slice(); // Clone the array items.push({ id: 'create', label: 'Create Story' }); return ( <ul onPointerEnter={() => setIsHover(true)} onPointerLeave={() => setIsHover(false)} style={{ backgroundColor: isHover ? '#ddd' : '#fff' }} > {items.map(story => ( <li key={story.id}> {story.label} </li> ))} </ul> ); }
Strict Mode γγͺγγγ°γεγ¬γ³γγΌγθΏ½ε γγͺγιγγγ°γοΏ½?οΏ½ζγ«θ¦ιγγ¦γγΎγηΆζ γ§γγγStrict Mode γ―εγγγ°γγγγ«θ¦γ€γγγγγ«γγΎγγStrict Mode γ―γγγΌγ γγ¦γΌγΆγ«ε ¬ιγγ¦γγΎγεγ«γγ°γθ¦γ€γγοΏ½?γ«ε½Ήη«γ‘γΎγγ
γ³γ³γγΌγγ³γγη΄η²γ«δΏγ€ζΉζ³γ«γ€γγ¦θ©³γγθͺγ
ιηΊδΈγ«γ¨γγ§γ―γγεοΏ½?οΏ½θ‘γγ¦θ¦γ€γγ£γγγ°οΏ½?οΏ½?ζ£
Strict Mode γ―γγ¨γγ§γ―γοΏ½?γγ°γθ¦γ€γγοΏ½?γ«γε½Ήη«γ‘γΎγγ
γγΉγ¦οΏ½?γ¨γγ§γ―γγ«γ―γ»γγγ’γγγ³γΌγγγγγδΈι¨οΏ½?γ¨γγ§γ―γγ«γ―γ―γͺγΌγ³γ’γγγ³γΌγγγγγΎγγιεΈΈγReact γ―γ³γ³γγΌγγ³γγγγ¦γ³γοΌη»ι’γ«θΏ½ε οΌγγγγ¨γγ«γ»γγγ’γγγ³γΌγγεΌγ³εΊγγγ³γ³γγΌγγ³γγγ’γ³γγ¦γ³γοΌη»ι’γγει€οΌγγγγ¨γγ«γ―γͺγΌγ³γ’γγγ³γΌγγεΌγ³εΊγγΎγγγοΏ½?εΎγεεοΏ½?γ¬γ³γγΌδ»₯ιγ«δΎει εγε€ζ΄γγγε ΄εγReact γ―εεΊ¦γ―γͺγΌγ³γ’γγγ¨γ»γγγ’γγγεΌγ³εΊγγΎγγ
Strict Mode γγͺγ³οΏ½?ε ΄εγReact γ―ιηΊδΈγ«γγΉγ¦οΏ½?γ¨γγ§γ―γγ«ε―Ύγγ¦ θΏ½ε γ§ 1 εγγ»γγγ’γγ+γ―γͺγΌγ³γ’γγοΏ½?γ΅γ€γ―γ«γοΏ½?οΏ½θ‘γγΎγγγοΏ½?ζεγ«ι©γγγγγγΎγγγγζεγ§θ¦γ€γγοΏ½?γι£γγοΏ½?ε¦γͺγγ°γζγγγ«γγοΏ½?γ«ε½Ήη«γ‘γΎγγ
Strict Mode γ§γ¨γγ§γ―γγεοΏ½?οΏ½θ‘γγγγ¨γγζ©ζγ«γγ°γθ¦γ€γγοΏ½?γ«γ©οΏ½?γγγ«ε½Ήη«γ€γγη€ΊγδΎγη€ΊγγΎγγ
δ»₯δΈοΏ½?δΎγ§γ―γγ³γ³γγΌγγ³γγγγ£γγγ«ζ₯ηΆγγ¦γγΎγγ
import { useState, useEffect } from 'react'; import { createConnection } from './chat.js'; const serverUrl = 'https://localhost:1234'; const roomId = 'general'; export default function ChatRoom() { useEffect(() => { const connection = createConnection(serverUrl, roomId); connection.connect(); }, []); return <h1>Welcome to the {roomId} room!</h1>; }
γοΏ½?γ³γΌγγ«γ―ει‘γγγγΎγγγγγγ«γ―ζγγγ§γ―γͺγγγγγγΎγγγ
ει‘γοΏ½?η«γγγγγγζ©θ½γοΏ½?οΏ½θ£
γγ¦γΏγΎγγγγδ»₯δΈοΏ½?δΎγ§γ―γroomId γ―γγΌγγ³γΌγγγγ¦γγγγ代γγγ«γγ¦γΌγΆγ―γγγγγγ¦γ³γγζ₯ηΆγγγ roomId γιΈζγ§γγΎγγβOpen chatβ γγ―γͺγγ―γγ欑γ«γ²γ¨γ€γγ€η°γͺγγγ£γγγ«γΌγ γιΈζγγ¦γγ γγγγ³γ³γ½γΌγ«γ§γ’γ―γγ£γγͺζ₯ηΆοΏ½?ζ°γζ°γγ¦γΏγ¦γγ γγγ
import { useState, useEffect } from 'react'; import { createConnection } from './chat.js'; const serverUrl = 'https://localhost:1234'; function ChatRoom({ roomId }) { useEffect(() => { const connection = createConnection(serverUrl, roomId); connection.connect(); }, [roomId]); return <h1>Welcome to the {roomId} room!</h1>; } export default function App() { const [roomId, setRoomId] = useState('general'); const [show, setShow] = useState(false); return ( <> <label> Choose the chat room:{' '} <select value={roomId} onChange={e => setRoomId(e.target.value)} > <option value="general">general</option> <option value="travel">travel</option> <option value="music">music</option> </select> </label> <button onClick={() => setShow(!show)}> {show ? 'Close chat' : 'Open chat'} </button> {show && <hr />} {show && <ChatRoom roomId={roomId} />} </> ); }
ιγγ¦γγζ₯ηΆοΏ½?ζ°γε’γηΆγγ¦γγγγ¨γ«γζ°γ₯γγ§γγγγοΏ½?οΏ½ιοΏ½?γ’γγͺγ±γΌγ·γ§γ³γ§γ―γγγγ«γγγγγ©γΌγγ³γΉγγγγγ―γΌγ―οΏ½?ει‘γηΊηγγΎγγει‘γ―γγ¨γγ§γ―γγ«γ―γͺγΌγ³γ’γγι’ζ°γγͺγγγ¨γ§γγ
useEffect(() => {
const connection = createConnection(serverUrl, roomId);
connection.connect();
return () => connection.disconnect();
}, [roomId]);γγγ§γ¨γγ§γ―γγθͺθΊ«γγγ―γͺγΌγ³γ’γγγγγε€γζ₯ηΆγη ΄ζ£γγγγγ«γͺγ£γοΏ½?γ§γγͺγΌγ―γ―θ§£ζΆγγγΎγγγγγγγει‘γθ¦γγ¦γγοΏ½?γ―γγγε€γοΏ½?ζ©θ½οΌιΈζγγγ―γΉοΌγθΏ½ε γγεΎγ§γγγ
ε
οΏ½?δΎγ§γ―γγγ°γ―ζγγγ§γ―γγγΎγγγ§γγγγ§γ―γε
οΏ½?οΌγγ°οΏ½?γγοΌγ³γΌγγ <StrictMode> γ§γ©γγγγ¦γΏγΎγγγοΌ
import { useState, useEffect } from 'react'; import { createConnection } from './chat.js'; const serverUrl = 'https://localhost:1234'; const roomId = 'general'; export default function ChatRoom() { useEffect(() => { const connection = createConnection(serverUrl, roomId); connection.connect(); }, []); return <h1>Welcome to the {roomId} room!</h1>; }
Strict Mode γδ½Ώη¨γγγ¨γγγγ«ει‘γγγγγ¨γγγγγΎγοΌγ’γ―γγ£γγͺζ₯ηΆοΏ½?ζ°γ 2 γ«θ·³γδΈγγγΎγοΌγStrict Mode γ―γγγΉγ¦οΏ½?γ¨γγ§γ―γγ«ε―Ύγγ¦γ»γγγ’γγ+γ―γͺγΌγ³γ’γγοΏ½?γ΅γ€γ―γ«γθΏ½ε γ§οΏ½?οΏ½θ‘γγΎγγγοΏ½?γ¨γγ§γ―γγ«γ―γ―γͺγΌγ³γ’γγγγΈγγ―γγͺγγγγδ½εγͺζ₯ηΆγδ½ζγγγ¦γη ΄ζ£γγγΎγγγ§γγγγγγ―γγ―γͺγΌγ³γ’γγι’ζ°γζ¬ γγ¦γγγγ¨γη€Ίγγγ³γγ§γγ
Strict Mode γδ½Ώη¨γγγ¨γγοΏ½?γγγͺγγΉγζ©ζγ«ζ°δ»γγγ¨γγ§γγΎγγStrict Mode γ§γ¨γγ§γ―γγ«γ―γͺγΌγ³γ’γγι’ζ°γθΏ½ε γγ¦οΏ½?ζ£γγγγ¨γ§γε γ»γ©οΏ½?ιΈζγγγ―γΉοΏ½?γγγͺγε°ζ₯ζ¬ηͺη°ε’γ§ηΊηγγγε€γοΏ½?γγ°γγγγγγγζ½°γγ¦γγγοΏ½?γ§γγ
import { useState, useEffect } from 'react'; import { createConnection } from './chat.js'; const serverUrl = 'https://localhost:1234'; function ChatRoom({ roomId }) { useEffect(() => { const connection = createConnection(serverUrl, roomId); connection.connect(); return () => connection.disconnect(); }, [roomId]); return <h1>Welcome to the {roomId} room!</h1>; } export default function App() { const [roomId, setRoomId] = useState('general'); const [show, setShow] = useState(false); return ( <> <label> Choose the chat room:{' '} <select value={roomId} onChange={e => setRoomId(e.target.value)} > <option value="general">general</option> <option value="travel">travel</option> <option value="music">music</option> </select> </label> <button onClick={() => setShow(!show)}> {show ? 'Close chat' : 'Open chat'} </button> {show && <hr />} {show && <ChatRoom roomId={roomId} />} </> ); }
γ³γ³γ½γΌγ«γ«θ‘¨η€Ίγγγγ’γ―γγ£γγͺζ₯ηΆοΏ½?ζ°γε’γγ¦γγγͺγγͺγ£γγγ¨γ«ζ³¨οΏ½?γγ¦γγ γγγ
Strict Mode γγͺγγγ°γγ¨γγ§γ―γγγ―γͺγΌγ³γ’γγγεΏ θ¦γ¨γγ¦γγγγ¨γοΏ½?οΏ½ζγ«θ¦ιγγ¨γγγ§γγγιηΊδΈγ«γ¨γγ§γ―γγ«ε―Ύγγ¦γγ»γγγ’γγ β γ―γͺγΌγ³γ’γγ β γ»γγγ’γγγγοΏ½?οΏ½θ‘γγγγ¨γ§γStrict Mode γ―γ―γͺγΌγ³γ’γγγγΈγγ―γζ¬ γγ¦γγγγ¨γ«γγζ°δ»γγγγγγοΏ½?γ§γγ
γ¨γγ§γ―γοΏ½?γ―γͺγΌγ³γ’γγοΏ½?οΏ½?οΏ½θ£ γ«γ€γγ¦θ©³γγθͺγ
Strict Mode γ«γγ£γ¦ζεΉεγγγιζ¨ε₯¨θ¦εοΏ½?οΏ½?ζ£
React γ―γ<StrictMode> γγͺγΌε
οΏ½?γγγγοΏ½?γ³γ³γγΌγγ³γγδ»₯δΈοΏ½?ιζ¨ε₯¨ API γδ½Ώη¨γγ¦γγε ΄εγ«θ¦εγηΊγγΎγγ
findDOMNodeγ代ζΏζοΏ½?οΏ½γθ¦γUNSAFE_γ―γ©γΉγ©γ€γγ΅γ€γ―γ«γ‘γ½γγοΌUNSAFE_componentWillMountγͺγ©οΌγ代ζΏζοΏ½?οΏ½γθ¦γ- γ¬γ¬γ·γΌγ³γ³γγ―γΉγοΌ
childContextTypesγcontextTypesγgetChildContextοΌγ代ζΏζοΏ½?οΏ½γθ¦γ - γ¬γ¬γ·γΌοΏ½?ζεεε refοΌ
this.refsοΌγ代ζΏζοΏ½?οΏ½γθ¦γ
γγγοΏ½? API γ―δΈ»γ«ε€γγ―γ©γΉγ³γ³γγΌγγ³γγ§δ½Ώη¨γγγ¦γγγοΏ½?γ§γγγηΎε¨οΏ½?γ’γγͺγ±γΌγ·γ§γ³γ§γ―γ»γ¨γγ©θ¦γγγΎγγγ