Skip to content

Commit 229f77f

Browse files
committed
usage
1 parent f41e5c5 commit 229f77f

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

src/content/reference/react-dom/client/hydrateRoot.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,86 @@ root.unmount();
115115
* بمجرد استدعاء `root.unmount`، لا يمكنك استدعاء `root.render` مرة أخرى على نفس الجذر. ستؤدي محاولة استدعاء `root.render` على جذر غير مثبتة إلى إطلاق خطأ "Cannot update an unmounted root". ومع ذلك، يمكنك إنشاء جذر جديد لنفس عنصر DOM بعد إلغاء تثبيت الجذر السابقة لذلك العنصر.
116116
117117
---
118+
119+
## الاستخدام {/*usage*/}
120+
121+
### ربط HTML تم رسمه بالخادم {/*hydrating-server-rendered-html*/}
122+
123+
إذا تم إنشاء HTML تطبيقك بواسطة [`react-dom/server`](/reference/react-dom/client/createRoot)، فستحتاج إلى *ترطيبه* في جانب الخادم.
124+
125+
```js [[1, 3, "document.getElementById('root')"], [2, 3, "<App />"]]
126+
import { hydrateRoot } from 'react-dom/client';
127+
128+
hydrateRoot(document.getElementById('root'), <App />);
129+
```
130+
131+
سيقوم هذا بترطيب HTML الخادم داخل <CodeStep step={1}>عنصر DOM المتصفح</CodeStep> باستخدام <CodeStep step={2}>مكوِّن React</CodeStep> لتطبيقك. عادةً ما تقوم بفعل ذلك مرة واحدة عند بدء التشغيل. إذا كنت تستخدم إطار عمل ما، فقد يقوم الإطار بعمل هذا الأمر بالنيابة عنك.
132+
133+
بهذه الطريقة، سيقوم React بـ "ربط" منطق المكوِّنات الخاصة بك بالـ HTML الأولي الذي تم إنشاؤه من الخادم. يحول الربطُ نسخة HTML الأولية من الخادم إلى تطبيق متفاعل بالكامل يعمل في المتصفح.
134+
135+
<Sandpack>
136+
137+
```html public/index.html
138+
<!--
139+
HTML content inside <div id="root">...</div>
140+
was generated from App by react-dom/server.
141+
-->
142+
<div id="root"><h1>Hello, world!</h1><button>You clicked me <!-- -->0<!-- --> times</button></div>
143+
```
144+
145+
```js index.js active
146+
import './styles.css';
147+
import { hydrateRoot } from 'react-dom/client';
148+
import App from './App.js';
149+
150+
hydrateRoot(
151+
document.getElementById('root'),
152+
<App />
153+
);
154+
```
155+
156+
```js App.js
157+
import { useState } from 'react';
158+
159+
export default function App() {
160+
return (
161+
<>
162+
<h1>Hello, world!</h1>
163+
<Counter />
164+
</>
165+
);
166+
}
167+
168+
function Counter() {
169+
const [count, setCount] = useState(0);
170+
return (
171+
<button onClick={() => setCount(count + 1)}>
172+
You clicked me {count} times
173+
</button>
174+
);
175+
}
176+
```
177+
178+
</Sandpack>
179+
180+
لن تحتاج لاستدعاء `hydrateRoot` مرة أخرى في أي مكان أخر. من هذه النقطة فصاعدًا، سيقوم React بإدارة DOM لتطبيقك. لتحديث واجهة مستخدم، ستقوم المكوِّنات الخاصة بك [باستخدام الحالة](/reference/react/useState) بدلاً من ذلك.
181+
182+
<Pitfall>
183+
184+
عنصر React الذي تمرره إلى `hydrateRoot` يحتاج إلى إنتاج **نفس النتيجة** التي حققها عند الخادم.
185+
186+
هذا مهم لتجربة المستخدم. سيقضي المستخدم بعض الوقت في النظر إلى HTML الذي تم إنشاؤه من الخادم قبل تحميل كود JavaScript الخاص بك. يخلق الرسم من جانب الخادم وهمًا بأن التطبيق يحمل بشكل أسرع عن طريق عرض نسخة HTML المُمنتج. إظهار محتوى مختلف فجأة يكسر هذا الوهم. لهذا السبب، يجب أن يتطابق إخراج الرسم الخادم مع إخراج الرسم الأولي على العميل.
187+
188+
أكثر الأسباب شيوعًا التي تؤدي إلى حدوث أخطاء الربط تشمل:
189+
190+
* فراغ إضافي (مثل الأسطر الجديدة) حول HTML المُنتَج بواسطة React داخل العنصر الجذر.
191+
* استخدام فحوص مثل `typeof window !== 'undefined'` في منطق الرسم الخاص بك.
192+
* استخدام واجهات برمجة تطبيقات معتمدة على المتصفح مثل [`window.matchMedia`](https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia) في منطق الرسم الخاص بك.
193+
* عرض بيانات مختلفة على الخادم والعميل.
194+
195+
يقوم React بالتعافي من بعض أخطاء الربط، ولكن يجب عليك **إصلاحها مثل الأخطاء الأخرى**. في أفضل الحالات، ستؤدي إلى إبطاء الأداء. في أسوأ الحالات، يمكن أن تتم إضافة المعالجات إلى العناصر الخاطئة.
196+
197+
</Pitfall>
198+
199+
---
200+

0 commit comments

Comments
 (0)