You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/learn/thinking-in-react.md
+2-7Lines changed: 2 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,3 +1,4 @@
1
+
1
2
---
2
3
title: Філасофія React
3
4
---
@@ -37,14 +38,8 @@ JSON API вяртае даныя, якія выглядаюць наступны
37
38
38
39
Вы можаце падыходзіць да разбівання дызайну на кампаненты па-рознаму, асноўваючыся на вашым досведзе:
39
40
40
-
<<<<<<< HEAD
41
-
=======
42
41
***Programming**--use the same techniques for deciding if you should create a new function or object. One such technique is the [separation of concerns](https://en.wikipedia.org/wiki/Separation_of_concerns), that is, a component should ideally only be concerned with one thing. If it ends up growing, it should be decomposed into smaller subcomponents.
43
-
***CSS**--consider what you would make class selectors for. (However, components are a bit less granular.)
44
-
***Design**--consider how you would organize the design's layers.
45
-
>>>>>>> a1cc2ab4bf06b530f86a7049923c402baf86aca1
46
-
47
-
***Праграмаванне**--выкарыстоўвайце той жа падыход, што і пры стварэнні простай функцыі або аб'екта. Можна прымяніць [прынцып адзінай адказнасці:](https://be.wikipedia.org/wiki/%D0%9F%D1%80%D1%8B%D0%BD%D1%86%D1%8B%D0%BF_%D0%B0%D0%B4%D0%B7%D1%96%D0%BD%D0%B0%D0%B9_%D0%B0%D0%B4%D0%BA%D0%B0%D0%B7%D0%BD%D0%B0%D1%81%D1%86%D1%96) гэта значыць, што ў ідэале кампанент павінен займацца нейкай адной задачай. Калі функцыянальнасць кампанента павялічваецца з цягам часу, яго варта разбіць на драбнейшыя падкампаненты.
42
+
***Праграмаванне**--выкарыстоўвайце той жа падыход, што і пры стварэнні простай функцыі або аб'екта. Можна прымяніць [падзяленне адказнасці:](https://en.wikipedia.org/wiki/Separation_of_concerns) гэта значыць, што ў ідэале кампанент мусіць быць адказнымза нешта адно. Калі функцыянальнасць кампанента павялічваецца з цягам часу, яго варта разбіць на драбнейшыя падкампаненты.
48
43
***CSS**--падумайце, для чаго б вы зрабілі селектары класаў (аднак памятайце, што кампаненты крыху менш дэтальныя).
49
44
***Дызайн**--падумайце, як бы вы арганізавалі слаі дызайну.
*[Агульныя тыпы з `@types/react`](/learn/typescript#useful-types)
17
+
*[Іншыя рэсурсы для вывучэння](/learn/typescript#further-learning)
25
18
26
19
</YouWillLearn>
27
20
28
21
## Усталёўка {/*installation*/}
29
22
30
-
<<<<<<< HEAD
31
-
Усе [React фрэймворкі, гатовыя для выкарыстання ў працоўным асяроддзі](/learn/start-a-new-react-project#production-grade-react-frameworks) прапануюць падтрымку TypeScript. Для кожнага фрэймворка трымайцеся ягоных уласных інструкцый:
32
-
=======
33
-
All [production-grade React frameworks](/learn/creating-a-react-app#full-stack-frameworks) offer support for using TypeScript. Follow the framework specific guide for installation:
34
-
>>>>>>> a1cc2ab4bf06b530f86a7049923c402baf86aca1
23
+
Усе [React фрэймворкі, гатовыя для выкарыстання ў працоўным асяроддзі](/learn/creating-a-react-app#full-stack-frameworks) прапануюць падтрымку TypeScript. Для кожнага фрэймворка трымайцеся ягоных уласных інструкцый:
Ваш `tsconfig.json` мае змяшчаць наступныя налады:
50
39
51
-
<<<<<<< HEAD
52
40
1.`dom` мае быць уключанае ў [`lib`](https://www.typescriptlang.org/tsconfig/#lib) (Заўвага: калі значэнне для `lib` не зададзенае, `dom` прадвызначана уключанае).
53
-
1.[`jsx`](https://www.typescriptlang.org/tsconfig/#jsx) мае мець любое валіднае значэнне. `preserve` мае падыходзіць для большасці выпадкаў.
41
+
2.[`jsx`](https://www.typescriptlang.org/tsconfig/#jsx) мае мець любое валіднае значэнне. `preserve` мае падыходзіць для большасці выпадкаў.
54
42
Калі вы публікуеце бібліятэку, звярніцеся да [дакументацыі па полю `jsx`](https://www.typescriptlang.org/tsconfig/#jsx) каб падабраць правільнае значэнне.
55
-
=======
56
-
1.`dom` must be included in [`lib`](https://www.typescriptlang.org/tsconfig/#lib) (Note: If no `lib` option is specified, `dom` is included by default).
57
-
2.[`jsx`](https://www.typescriptlang.org/tsconfig/#jsx) must be set to one of the valid options. `preserve` should suffice for most applications.
58
-
If you're publishing a library, consult the [`jsx` documentation](https://www.typescriptlang.org/tsconfig/#jsx) on what value to choose.
59
-
>>>>>>> a1cc2ab4bf06b530f86a7049923c402baf86aca1
60
43
61
44
## TypeScript з кампанентамі React {/*typescript-with-react-components*/}
62
45
@@ -141,11 +124,7 @@ export default App = AppTSX;
141
124
142
125
## Прыклады хукаў {/*example-hooks*/}
143
126
144
-
<<<<<<< HEAD
145
-
Апісанні тыпаў у `@types/react` уключае таксама і тыпізацыю ўбудаваных хукаў, таму вы можаце выкарыстоўваць іх у сваіх кампанентах без дадатковай налады. Яны пабудаваныя такім чынам, каб улічваць код, ужо напісаны ў кампаненце, такім чынам вы атрымаеце [аўтаматычна вызначаныя тыпы](https://www.typescriptlang.org/docs/handbook/type-inference.html) і ў большасці выпадкаў вам не давядзецца разбірацца з дробнай тыпізацыяй самастойна.
146
-
=======
147
-
The type definitions from `@types/react` include types for the built-in Hooks, so you can use them in your components without any additional setup. They are built to take into account the code you write in your component, so you will get [inferred types](https://www.typescriptlang.org/docs/handbook/type-inference.html) a lot of the time and ideally do not need to handle the minutiae of providing the types.
148
-
>>>>>>> a1cc2ab4bf06b530f86a7049923c402baf86aca1
127
+
Апісанні тыпаў у `@types/react` уключае таксама і тыпізацыю ўбудаваных хукаў, таму вы можаце выкарыстоўваць іх у сваіх кампанентах без дадатковай налады. Яны пабудаваныя такім чынам, каб улічваць код, ужо напісаны ў кампаненце, такім чынам вы атрымаеце [аўтаматычна вызначаныя тыпы](https://www.typescriptlang.org/docs/handbook/type-inference.html) і ў большасці выпадкаў вам не давядзецца разбірацца з дробнай тыпізацыяй самастойна.
149
128
150
129
Але далей мы разгледзім некалькі прыкладаў, як тыпізаваць хукі.
Для `enabled` будзе вызначаны тып `boolean`, а `setEnabled` будзе прымаць або `boolean`, або функцыю, якая вяртае `boolean`. Калі вы хочаце відавочна перадаць тып для вашага стану, вы можаце зрабіць гэта, паказаўшы тып аргумента пры выкліку `useState`:
Дадзеная тэхніка працуе калі маецца прадвызначанае значэнне, якое мае сэнс, але бываюць сітуацыі, калі такога няма. У такім выпадку разумна будзе скарыстацца `null` у якасці прадвызначанага значэння. Але каб сістэме тыпізацыі было зразумела, трэба відавочна ўказаць тып `ContextShape | null` для `createContext`.
315
-
=======
316
-
Thistechniqueworkswhenyouhaveadefaultvaluewhichmakessense-butthereareoccasionallycaseswhenyoudonot, andinthosecases`null`canfeelreasonableasadefaultvalue. However, toallowthetype-systemtounderstandyourcode, youneedtoexplicitlyset`ContextShape | null`onthe`createContext`.
317
-
>>>>>>>a1cc2ab4bf06b530f86a7049923c402baf86aca1
318
288
319
289
Разам з тым з’яўляецца патрэба выключаць `| null` пры атрыманні значэння. Мы раім дадаць у хук праверку, якая будзе падчас выканання правяраць наяўнасць значэння і выкідваць памылку пры яго адсутнасці:
320
290
@@ -359,17 +329,13 @@ function MyComponent() {
359
329
360
330
### `useMemo` {/*typing-usememo*/}
361
331
362
-
<<<<<<<HEAD
363
-
[Хук `useMemo`](/reference/react/useMemo) дапамагае ствараць і паўторна атрымліваць доступ да запомненых вынікаў запуску функцыі. Функцыя будзе выконвацца наноў толькі ў выпадках, калі зменіцца залежнае значэнне, перададзенае другім параметрам. Вынік выкліку функцыі будзе аўтаматычна тыпізаваны адпаведна функцыі, што была перададзеная першым параметрам. Вы можаце тыпізаваць хук відавочна, перадаўшы яму тып.
364
-
=======
365
332
<Note>
366
333
367
334
[React Compiler](/learn/react-compiler) automatically memoizes values and functions, reducing the need for manual `useMemo` calls. You can use the compiler to handle memoization automatically.
368
335
369
336
</Note>
370
337
371
-
The [`useMemo`](/reference/react/useMemo) Hookswillcreate/re-accessamemorizedvaluefromafunction call, re-running the function only when dependencies passed as the 2nd parameter are changed. The result of calling the Hook is inferred from the return value from the function in the first parameter. You can be more explicit by providing a type argument to the Hook.
372
-
>>>>>>> a1cc2ab4bf06b530f86a7049923c402baf86aca1
338
+
[Хук `useMemo`](/reference/react/useMemo) дапамагае ствараць і паўторна атрымліваць доступ да запомненых вынікаў запуску функцыі. Функцыя будзе выконвацца наноў толькі ў выпадках, калі зменіцца залежнае значэнне, перададзенае другім параметрам. Вынік выкліку функцыі будзе аўтаматычна тыпізаваны адпаведна функцыі, што была перададзеная першым параметрам. Вы можаце тыпізаваць хук відавочна, перадаўшы яму тып.
373
339
374
340
```ts
375
341
// Тып visibleTodos вызначаны аўтаматычна з тыпу значэння, што вяртае функцыя filterTodos
[Хук `useCallback`](/reference/react/useCallback) забяспечвае стабільную спасылку на функцыю пакуль залежнасці, перададзеныя другім параметрам, не змяняюцца. Як і `useMemo`, тып функцыі вызначаецца па тыпе функцыі, што перададзеная першым параметрам, але болей відавочна ўказаць тып можна перадаўшы яго ў хук.
384
-
=======
385
348
<Note>
386
349
387
350
[React Compiler](/learn/react-compiler) automatically memoizes values and functions, reducing the need for manual `useCallback` calls. You can use the compiler to handle memoization automatically.
388
351
389
352
</Note>
390
353
391
-
The [`useCallback`](/reference/react/useCallback) provideastablereferencetoafunction as long as the dependencies passed into the second parameter are the same. Like `useMemo`, the function's type is inferred from the return value of the function in the first parameter, and you can be more explicit by providing a type argument to the Hook.
392
-
>>>>>>> a1cc2ab4bf06b530f86a7049923c402baf86aca1
354
+
[Хук `useCallback`](/reference/react/useCallback) забяспечвае стабільную спасылку на функцыю пакуль залежнасці, перададзеныя другім параметрам, не змяняюцца. Як і `useMemo`, тып функцыі вызначаецца па тыпе функцыі, што перададзеная першым параметрам, але болей відавочна ўказаць тып можна перадаўшы яго ў хук.
Пры працы з TypeScript у строгім рэжыме, `useCallback` патрабуе дадатковай тыпізацыі параметраў функцыі. Гэта таму што тып функцыі вызначаны па тыпе вяртаемага значэння і не можа быць цалкам зразумелым.
402
364
403
-
<<<<<<<HEAD
404
-
У залежнасці ад вашых пераваг у стылі кода, вы можаце выкарыстоўваць функцыі `*EventHandler` з тыпаў React для забеспячэння тыпізацыі апрацоўшчыкаў падзей прама падчас аб’яўлення:
405
-
=======
406
-
Dependingonyourcode-stylepreferences, youcouldusethe`*EventHandler`functionsfromtheReacttypestoprovidethetypefor the event handler at the same time as defining the callback:
407
-
>>>>>>> a1cc2ab4bf06b530f86a7049923c402baf86aca1
365
+
У залежнасці ад вашых пераваг у стылі кода, вы можаце выкарыстоўваць функцыі `*EventHandler` з тыпаў React для забеспячэння тыпізацыі апрацоўшчыкаў падзей прама падчас аб’яўлення:
Заўважце, што немагчыма выкарыстоўваць TypeScript для апісання нейкага пэўнага элемента JSX. То-бок вы не можаце выкарыстоўваць сістэму тыпізацыі каб апісаць кампанент, які прымае, напрыклад, толькі даччыныя элементы `<li>`.
Вы можаце пабачыць прыклады абодвух тыпаў `React.ReactNode` і `React.ReactElement` з праверкай тыпаў на [гэтай тэставай пляцоўцы TypeScript](https://www.typescriptlang.org/play?#code/JYWwDg9gTgLgBAJQKYEMDG8BmUIjgIilQ3wChSB6CxYmAOmXRgDkIATJOdNJMGAZzgwAFpxAR+8YADswAVwGkZMJFEzpOjDKw4AFHGEEBvUnDhphwADZsi0gFw0mDWjqQBuUgF9yaCNMlENzgAXjgACjADfkctFnYkfQhDAEpQgD44AB42YAA3dKMo5P46C2tbJGkvLIpcgt9-QLi3AEEwMFCItJDMrPTTbIQ3dKywdIB5aU4kKyQQKpha8drhhIGzLLWODbNs3b3s8YAxKBQAcwXpAThMaGWDvbH0gFloGbmrgQfBzYpd1YjQZbEYARkB6zMwO2SHSAAlZlYIBCdtCRkZpHIrFYahQYQD8UYYFA5EhcfjyGYqHAXnJAsIUHlOOUbHYhMIIHJzsI0Qk4P9SLUBuRqXEXEwAKKfRZcNA8PiCfxWACecAAUgBlAAacFm80W-CU11U6h4TgwUv11yShjgJjMLMqDnN9Dilq+nh8pD8AXgCHdMrCkWisVoAet0R6fXqhWKhjKllZVVxMcavpd4Zg7U6Qaj+2hmdG4zeRF10uu-Aeq0LBfLMEe-V+T2L7zLVu+FBWLdLeq+lc7DYFf39deFVOotMCACNOCh1dq219a+30uC8YWoZsRyuEdjkevR8uvoVMdjyTWt4WiSSydXD4NqZP4AymeZE072ZzuUeZQKheQgA).
0 commit comments