From 9cdfb20c6a0acf8994137f1992fce040e5e3243e Mon Sep 17 00:00:00 2001 From: Gasim Gasimzada Date: Fri, 18 Oct 2019 13:19:43 +0400 Subject: [PATCH 1/2] Translate Passing Functions to Components FAQ --- content/docs/faq-functions.md | 142 +++++++++++++++++----------------- content/docs/nav.yml | 2 +- 2 files changed, 72 insertions(+), 72 deletions(-) diff --git a/content/docs/faq-functions.md b/content/docs/faq-functions.md index f03b2ba76..c26d9fe83 100644 --- a/content/docs/faq-functions.md +++ b/content/docs/faq-functions.md @@ -1,26 +1,26 @@ --- id: faq-functions -title: Passing Functions to Components +title: Funksiyaların Komponentlərə Göndərilməsi permalink: docs/faq-functions.html layout: docs category: FAQ --- -### How do I pass an event handler (like onClick) to a component? {#how-do-i-pass-an-event-handler-like-onclick-to-a-component} +### Komponentə hadisə işləyicisini (onClick kimi) necə göndərə bilərəm? {#how-do-i-pass-an-event-handler-like-onclick-to-a-component} -Pass event handlers and other functions as props to child components: +Hadisə işləyicilərini və digər funksiyaları uşaq komponentlərə proplar kimi göndərin: ```jsx ; + return ; } } ``` -#### Class Properties (Stage 3 Proposal) {#class-properties-stage-3-proposal} +#### Klas Parametrləri (3-cü Mərhələ Təklifi) {#class-properties-stage-3-proposal} ```jsx class Foo extends Component { - // Note: this syntax is experimental and not standardized yet. + // Qeyd: bu sintaksis experimentaldır və hələ standartlaşmayıb. handleClick = () => { - console.log('Click happened'); + console.log('Tıklama Hadisəsi Baş Verdi'); } render() { - return ; + return ; } } ``` -#### Bind in Render {#bind-in-render} +#### Render-dən Bind Etmək {#bind-in-render} ```jsx class Foo extends Component { handleClick() { - console.log('Click happened'); + console.log('Tıklama Hadisəsi Baş Verdi'); } render() { - return ; + return ; } } ``` ->**Note:** +>**Qeyd:** > ->Using `Function.prototype.bind` in render creates a new function each time the component renders, which may have performance implications (see below). +>`Function.prototype.bind` funksiyanı render-dən çağrıldıqda komponentin hər render edilməsi zamanı yeni funksiya yaranacaq. Bunun performansa təsiri ola bilər (aşağıdakı bölmələrə baxın). -#### Arrow Function in Render {#arrow-function-in-render} +#### Render-də Ox Funksiyası {#arrow-function-in-render} ```jsx class Foo extends Component { handleClick() { - console.log('Click happened'); + console.log('Tıklama Hadisəsi Baş Verdi'); } render() { - return ; + return ; } } ``` ->**Note:** +>**Qeyd:** > ->Using an arrow function in render creates a new function each time the component renders, which may break optimizations based on strict identity comparison. +>Render-dən ox funksiyası işlədildikdə komponent hər render edilməsi zamanı yeni funksiya yaranacaq. Bu, identiklik müqayisələrin optimizasiyalarını sındıra bilər. -### Is it OK to use arrow functions in render methods? {#is-it-ok-to-use-arrow-functions-in-render-methods} +### Render funksiyalarında ox funksiyalarını işlətmək olar? {#is-it-ok-to-use-arrow-functions-in-render-methods} -Generally speaking, yes, it is OK, and it is often the easiest way to pass parameters to callback functions. +Normalda, olar. Bu, parametrlərini callback funksiyalarına göndərməyin ən asan yoludur.. -If you do have performance issues, by all means, optimize! +Performans problemləri olandaa, optimizasiya edin! -### Why is binding necessary at all? {#why-is-binding-necessary-at-all} +### Binding Niyə Vacibdir? {#why-is-binding-necessary-at-all} -In JavaScript, these two code snippets are **not** equivalent: +JavaScript-də bu iki kod bərabər **deyil**: ```js obj.method(); @@ -104,50 +104,50 @@ var method = obj.method; method(); ``` -Binding methods helps ensure that the second snippet works the same way as the first one. +İkinci kod ilə birinci kodun eyni işləməsi üçün binding lazımdır. -With React, typically you only need to bind the methods you *pass* to other components. For example, ` + // Yanlışdır: handleClick funksiyası referans kimi göndərilmək əvəzinə çağrılır! + return } ``` -Instead, *pass the function itself* (without parens): +Əvəzinə, *funksiyanın özünü göndərin* (mötərizəsiz): ```jsx render() { - // Correct: handleClick is passed as a reference! - return + // Düzdür: handleClick funksiyası referans kimi göndərilir! + return } ``` -### How do I pass a parameter to an event handler or callback? {#how-do-i-pass-a-parameter-to-an-event-handler-or-callback} +### Hadisə işləyicisinə və callback-ə necə parametr göndərə bilərəm? {#how-do-i-pass-a-parameter-to-an-event-handler-or-callback} -You can use an arrow function to wrap around an event handler and pass parameters: +Ox funksiyası ilə hadisə işləyicisini əhatə edərək parametrləri göndərə bilərsiniz: ```jsx ; + return ; } handleClick() { @@ -262,7 +262,7 @@ class LoadMoreButton extends React.Component { #### Debounce {#debounce} -Debounce etmək funksiyanın son çağırışından bir qədər vaxt keçmədən çağrılmasının qabağını alır. Bu metod, tez-tez göndərilən hadisənin (məsələn, skrol və ya klaviatur hadisələri) cavabı nəticəsində bahalı hesablama apardıqda faydalıdır. Aşağıdakı nümunədə anket sakəsi 250ms gecikmə ilə yazılır. +Debounce ilə funksiyanın son çağırışından bir qədər vaxt keçmədən çağrılmasının qarşısı alınır. Bu metod, tez-tez göndərilən hadisənin (məsələn, skrol və ya klaviatur hadisələri) cavabı nəticəsində bahalı hesablama apardıqda faydalıdır. Aşağıdakı nümunədə anket sakəsi 250ms gecikmə ilə yazılır. ```jsx import debounce from 'lodash.debounce'; @@ -283,7 +283,7 @@ class Searchbox extends React.Component { ); @@ -291,8 +291,8 @@ class Searchbox extends React.Component { handleChange(e) { // React hadisələri pool etdiyindən biz dəyəri debounce-dan əvvəl oxuyuruq. - // Alternativ olaraq, `event.persist()` funksiyasını çağıraraq bütün hadisəni göndərə bilərik. - // Əlavə məlumat üçün reactjs.org/docs/events.html#event-pooling səhifəsinə baxın. + // Alternativ olaraq, `event.persist()` funksiyasını çağıraraq bütün hadisəni göndərmək mümkündür. + // Əlavə məlumat üçün az.reactjs.org/docs/events.html#event-pooling səhifəsinə baxın. this.emitChangeDebounced(e.target.value); } @@ -302,13 +302,13 @@ class Searchbox extends React.Component { } ``` -#### `requestAnimationFrame` boğması {#requestanimationframe-throttling} +#### `requestAnimationFrame` ilə boğmaq {#requestanimationframe-throttling} -[`requestAnimationFrame`](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) ilə funksiyanı brauzerdə növbəyə salaraq render performansını artırmaq üçün optimal olan zamanda çağrılır. `requestAnimationFrame` növbələnən funksiya sonrakı kadrda çağrılacaq. Brauzer saniyəyə 60 kadrın olmasını (60 fps) təmin etmək üçün çox çalışacaq. Brauzer 60 fps təmin edə bilmədikdə natural olaraq saniyəyə düşən kadrların sayını *məhdudlaşdıracaq*. Məsələn, aparat yalnız 30 fps qəbul edə bilirsə, brauzer saniyəyə 30 kadr göstərəcək. Saniyəyə 60-dan çox yenilik etmənin qabağını almaq üçün `requestAnimationFrame` funksiyasını boğma üçün istifadə etmək faydalıdır. Onsuzda, 100-dən çox yenilik edildikdə brauzerin icra edəcəyi işi istifadəçi görməyəcək. +[`requestAnimationFrame`](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) funksiyası, göndərilən funksiyanı brauzerdə növbəyə salaraq render performansını artırmaq üçün bu funksiyanı optimal zamanda çağırır. `requestAnimationFrame` ilə növbələnən funksiya sonrakı kadrda çağrılacaq. Brauzer saniyəyə 60 kadrın olmasını (60 fps) təmin etmək üçün çox çalışacaq. Lakin, 60 fps təmin edilə bilmədikdə natural olaraq bir saniyəyə düşən kadrların sayı *məhdudlaşdırılacaq*. Məsələn, aparat yalnız 30 fps qəbul edə bilirsə, brauzer saniyəyə 30 kadr göstərəcək. Saniyəyə 60-dan çox yenilik etmənin qabağını almaq üçün `requestAnimationFrame` funksiyasını boğma üçün istifadə etmək faydalıdır. Onsuzda, 100-dən çox yenilik edildikdə brauzerin icra edəcəyi işi istifadəçi görməyəcək. >**Qeyd:** > ->Bu texnika ilə ən kadrda dərc olunan ən sonuncu dəyər işlədiləcək. Bu optimizasiyanın işləməsini görmək üçün [`MDN-də`](https://developer.mozilla.org/en-US/docs/Web/Events/scroll) olan nümunəyə baxın. +>Bu texnika ilə bir kadrda dərc olunan ən sonuncu dəyər işlədiləcək. Bu optimizasiyanın işləməsini görmək üçün [`MDN-də`](https://developer.mozilla.org/en-US/docs/Web/Events/scroll) olan nümunəyə baxın. ```jsx import rafSchedule from 'raf-schd'; @@ -326,8 +326,8 @@ class ScrollListener extends React.Component { } handleScroll(e) { - // Skrol hadisəsi gəldikdə yenilik planlaşdırın. - // Bir kadrda çoxlu yenilik gəldikdə yalnız sonuncu dəyər dərc olunacaq.. + // Skrol hadisəsi gəldikdə yeniliyi planlaşdırın. + // Bir kadr zamanı çoxlu yenilik baş verdikdə yalnız sonuncu dəyər dərc olunacaq. this.scheduleUpdate({ x: e.clientX, y: e.clientY }); } @@ -349,6 +349,6 @@ class ScrollListener extends React.Component { } ``` -#### Sürətin məhdudlaşmasını test edin {#testing-your-rate-limiting} +#### Sürətin məhdudlaşdırılmasını test edin {#testing-your-rate-limiting} Sürəti məhdudlaşan kodu test etdikdə vaxtı qabağa çəkmək qabiliyyətinin olması faydalı ola bilər. [`Jest`](https://facebook.github.io/jest/) işlədirsinizsə, vaxtı qabağa çəkmək üçün [`taymer moklarından`](https://facebook.github.io/jest/docs/en/timer-mocks.html) istifadə edə bilərsiniz. `requestAnimationFrame` boğmasından istifadə etdikdə animasiya kadrlarını idarə etmək üçün [`raf-stub`](https://github.com/alexreardon/raf-stub) alətini faydalı tapa bilərsiniz.