Funksiyaların Komponentlərə Göndərilməsi
Məni başqa bir adamda axtaracaqsan, söz verirəm. Və məni heç vaxt tapa bilməyəcəksən.
Ürək Darıxdırıcı Birtərəfli Sevgi Sitatları
Ah, sevgi. Bəzən bir insana aşiq olanda zarların necə düşəcəyini təxmin edə bilməzsən. Bir tərəfdən, həyatınızda yaşadığınız ən şirin və ən gözəl təcrübə ola bilər. Digər tərəfdən, bu sevgini itirmək, keçə biləcəyiniz ən dağıdıcı həyat təcrübələrindən biri ola bilər.
Səni sevməyən bir insanı sevməkdən daha ağrılı bir sevgi yoxdur. Eyni zamanda sinir bozucu və ürəkaçandır. Sevginizin obyektini sizi yenidən sevdirmək üçün oxuya biləcəyiniz bəzi sehrli bir sehr olmasını istərdiniz. Ancaq bilirsiniz ki, bu heç vaxt baş verə bilməz. Qaldığın tək şey, kiminsə səni sevdirə bilmədiyini soruşanda ağrı və əzabdır.
Bir tərəfli sevgi vəziyyətindən keçirsinizmi? Səni bir dostdan daha çox görə bilməyən insanı hər düşünəndə ürəyin ağrıyır?
Sevgi problemlərinizi həll edə bilməyəcəyik, ancaq eyni vəziyyəti yaşayan insanlar tərəfindən hazırlanan dərin sözlərlə hisslərinizi ifadə edə bilərik:
“Baş verə biləcək ən pis şey nədir?” Sən gedəndə düşündüm. Tezliklə bunun ən pis olduğunu öyrəndim.
Bir nöqtədə, onun əhəmiyyət vermədiyini başa düşməlisiniz və əslində buna əhəmiyyət verən birini əldən verə bilərsiniz.
Nə itirdiyini heç vaxt bilməyəcək, çünki düzünü deyək; nə olduğunu bilmirdi.
Nə itirdiyini heç vaxt bilməyəcək, çünki düzünü deyək; nə olduğunu bilmirdi.
Xeyr deməsi bağırsağa zərbədir. Amma yox deməsi və başqasına bəli deməsi qəlbi sancır.
Sənə həyat nəfəs verdim və sən əsassız nifrəti tüpürdün. Beləliklə, bir sevgilinin və döyüşçünün ölümcül mübadiləsi gedir.
Ürəksiz olmadım, daha ağıllı oldum. Mənim xoşbəxtliyim başqasından asılı olmayacaq, artıq olmayacaq.
Sənə bütün bu qorxunc şeyləri söyləməyi planlaşdırmışdım, amma sonunda sənə darıxdığımı demək istəyirəm.
Ümid edirəm ara sıra ağlınızı başımdan keçirirəm, buna görə də sizi düşünmək üçün yazığım gəlmir.
Nə vaxt dayanacağımı bilirəm. İşlərin nə vaxt buraxılacağını bilirəm. Nə vaxt hərəkət edəcəyimi bilirəm. Necə tənzimlənəcəyimi bilirəm. Amma “bilirəm” “edə bilərəm” dən fərqlidir.
Xəyal qurmağı sevirəm, çünki xəyallarımda əslində sən mənimsən.
Sənin yanında olduğum üçün hər şeyin yaxşı hiss olunduğu vaxtı darıxıram.
Sənin üstündə ağladığımı xatırlayıram və bir neçə göz yaşı demək istəmirəm və maviyəm. Yıxılmaqdan və aya qışqırmaqdan danışıram.
Məni daha çox qorxudan şeydən əmin deyiləm ki, nə məni sevməyə başlayacaqsan, nə də səni sevməyi dayandırmayacağam.
Səni istəsəydi, orada olardı. Səni istəsəydi, heç vaxt sorğu -sual etməzdin. Səni istəsəydi səni seçərdi.
Kimsə səni saxlamaq üçün mübarizə aparmırsa, qalmaq üçün heç vaxt özünlə savaşma.
Sənin yanına düşməyimi istəyirsənsə, yıxılmağa dəyər bir şey verməlisən.
Daim səni düşündüyümü demirəm, amma ağlımın hər dəfə gəzəndə həmişə sənə bir yol tapdığını inkar edə bilmərəm.
Ürəyində kimsə olanda ağrıyır amma qucağında saxlaya bilmirsən.
Bir insanın ürəyinizi necə sındıra biləcəyi çox gülməlidir və yenə də bütün kiçik parçalarla onları sevə bilərsiniz.
Heç vaxt baş verməyəcəyini bildiyiniz bir şeyi gözləmək çətindir. amma istədiyin hər şey olduğunu bildiyin zaman təslim olmaq daha çətindir.
Çox ironikdir. Həyatımda ‘Mən həmişə sənin üçün burada olacağam’ deyən insanlar ilk olaraq uzaqlaşanlardır.
Artıq bir il keçdi və ürəyimi içəri çevirməyinizi hələ də unutmamışam. Və məni acı və çürük etdi. Artıq bir il keçdi və hələ də gözəl sevgimizin necə qəfil, qəfil sona çatdığını unuda bilmirəm.
Sənin üzərində olduğumu düşündüyüm anda. Başımı ayağıma söykədin və özümü isti hiss etdim. Sonra çıxartdın və günəşin getdiyini hiss etdim və soyuqluqla əhatə olundum.
Sevgi həmişə mükəmməl olmur. Bu nağıl və ya hekayə kitabı deyil. Və həmişə asan olmur.
Bəlkə də sahib ola bilmədiyim insanlara əbədi olaraq aşiq olmağı yazmışam. Bəlkə də onları tapmağımı gözləyən bir çox imkansız insan var. Eyni imkansızlığı təkrar -təkrar hiss etdirməyimi gözləyirəm.
Sənin üçün hər şeyi nəzərdə tutduğunu anlamaqdan daha ağrılı bir şey yoxdur, amma sən onun üçün heç nə demək istəmirdin.
İnsanlar əlini qaranlıqda tutacaqlar, amma sonra işığı tapanda buraxacaqlar.
Bəlkə də gözlərimizi birdəfəlik göz yaşlarımızla yumaq lazımdır ki, həyatı yenidən daha aydın şəkildə görə bilək.
Bir sirenə bənzəyirdi. O, cansıxıcı olduqda bir və ya iki dəfə istifadə olunmaq üçün ətrafdakıların sevgisini oyuncaq kimi saxlayaraq topladı.
Sən getdiyin üçün mən itmişəm. Səni yalnız hiss etdiyim və gördüyüm bir yerdə itirdim, başqasını yox. Yenə də bura səni aldığım yeganə yerdir, çünki əslində sən mənim deyilsən və doğru olmaq üçün səninlə mənim bir -birimizə aid olmadığımız bir dünyada yaşamaqdansa itirilməyi üstün tuturam.
Odur ki, saxta olsa da məni sevdiyini söyləyin. Artıq götürə biləcəyiniz hər şeyi götürdünüz.
Bəzi insanlar səni itirməklə səni qiymətləndirməyi öyrənməli olacaqlar.
Bəzən nə hiss etdiyimi söyləmirəm, çünki aramızdakı səssizliyin sənə bir ipucu verəcəyini ümid edirəm.
Bəzən hiss etdiyinizi başqalarına söyləməkdənsə susmaq daha yaxşıdır, çünki bunu bildiyiniz zaman çox ağrıyır.
Bəzən kimsə sənə qayğı göstərməyi dayandırana qədər nə qədər qayğı göstərdiyinin fərqinə varmırsan.
Ürəyinizi parçalamaq üçün belə mübarizə aparmayan biri üçün ürəyinizi sındırmağı dayandırın.
Başqasının sənə verdiyi ürəyə diqqət et. Onu əzmək ömürlük xaosun qüvvəyə minməsinə səbəb ola bilər.
Əsl sevginin nə olduğunu belə başa düşürsən. Biri üçün ən yaxşısını istəmək, ən yaxşısı artıq səni əhatə etməsə də.
Baş verən budur. İnsanları içəri buraxırsan, səni məhv edərlər.
Ən ağrılı şey, yanında ola bilməyəcəyiniz bir insana qarşı hisslər yaratmaqdır.
Aranızdakı məsafədən asılı olmayaraq, nə qədər danışmasanız da, həmişə belə bir adam olacaq; onu sevməyi heç vaxt dayandırmayacaqsan.
Oğurladığım ən pis şey nədir? Yəqin ki, digər insanların həyatından kiçik parçalar. Ya vaxtlarını boşa xərclədiyim, ya da bir şəkildə incitdiyim yerlər. Oğurlaya biləcəyiniz ən pis şey, digər insanların vaxtıdır. Bunu geri qaytara bilməzsən.
Səni görəndə, hələ də sinəmdə bir sıçrayış var- hələ də bir il əvvəl necə hiss etdiyimi xatırladıram. Ancaq yaxşılaşıram, heç olmasa ümid edirəm.
Yalnız həyatıma girməyə və əhəmiyyət verməyə başlaya və bunun vacib bir hissəsi ola bilməzsən, sonra sinəmdə bir deşikdən başqa heç nə qoymadan uzaqlaşa bilməzsən.
Məni sevmədin. Sənin üçün burada olduğumu çox sevirdin. Sənə göstərdiyim diqqəti çox bəyəndin. Sənin üçün hər şeyi atacağımı çox sevirdin. Sən məni sevmədin, amma tanrı, səni sevdim.
Səni itirmək istəməyən birini tutmağa çalışanda özünü itirirsən.
Məni itirməkdən qorxduğunu söylədin və sonra qorxularınla üzləşib ayrıldın.
Sən xəbərdarlıq etmədən gələn eşq idin. Yox deyə bilməmişdən əvvəl ürəyim vardı. Və sonra “getmə” deyə bilmədən çox tez ayrıldın.
Məni başqa bir adamda axtaracaqsan, söz verirəm. Və məni heç vaxt tapa bilməyəcəksən.
Məyusluğunuzu hiss etməyinizə, ağrı və əzabdan zövq almağınıza icazə verin. Və ürəyiniz kifayət qədər dolduqda, buraxmağı asanlaşdırır. Və buraxdığınız zaman qarşınıza gələn sevginin qarşınıza çıxması üçün imkanlar aça bilərsiniz.
Funksiyaların Komponentlərə Göndərilməsi
Hadisə işləyicilərini və digər funksiyaları uşaq komponentlərə proplar kimi göndərin:
button onClick=this.handleClick>>
Hadisə işləyicisində valideyn komponentdən istifadə etmək istədikdə, funksiyanı komponent instansiyasına bind etmək lazımdır (aşağı bölməyə baxın).
Funksiyanı komponent instansiyasına necə bind edə bilərəm?
Qurulma addımından və sintaksisdən asılı olaraq funksiyaların this.props və this.state kimi atributları istifadə etməsi üçün bir neçə yolu var.
Konstruktorda Bind etmək (ES2015)
class Foo extends Component constructor(props) super(props); this.handleClick = this.handleClick.bind(this); > handleClick() console.log('Tıklama Hadisəsi Baş Verdi'); > render() return button onClick=this.handleClick>>Tıklabutton>; > >
Sinif Parametrləri (3-cü Mərhələ Təklifi)
class Foo extends Component // Qeyd: bu sintaksis experimentaldır və hələ standartlaşmayıb. handleClick = () => console.log('Tıklama Hadisəsi Baş Verdi'); >; render() return button onClick=this.handleClick>>Tıklabutton>; > >
Render-də Bind etmək
class Foo extends Component handleClick() console.log('Tıklama hadisəsi baş verdi'); > render() return button onClick=this.handleClick.bind(this)>>Tıklabutton>; > >
Qeyd:
Function.prototype.bind funksiyanı render-də çağırdı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).
Render-də Ox Funksiyası
class Foo extends Component handleClick() console.log('Tıklama Hadisəsi Baş Verdi'); > render() return button onClick=() => this.handleClick()>>Tıklabutton>; > >
Qeyd:
Render-dən ox funksiyası işlədildikdə komponentin hər render edilməsi zamanı yeni funksiya yaranacaq. Bu, identiklik müqayisələrə dayalı optimallaşdırılmaları sındıra bilər.
Render funksiyalarında ox funksiyalarını işlətmək olar?
Normalda, olar. Bu, callback funksiyalarına arqumentlər göndərməyin ən asan yoludur.
Performans problemləri olduqda optimallaşdırma edin!
Bind etmə niyə vacibdir?
JavaScript-də aşağıdakı iki kod parçası bərabər deyil:
obj.method();
var method = obj.method; method();
İkinci kod parçası ilə birinci kod parçasının eyni işləməsi üçün bind etmə lazımdır.
React-də, adətən digər komponentlərə göndərilən funksiyaları bind etmək lazımdır. Məsələn, > kodu this.handleClick funksiyasını göndərdiyinə görə bu funksiyanı bind etmək lazımdır. Lakin, render və ya lifecycle funksiyalarını bind etmək lazım deyil. Biz bu funksiyaları digər komponentlərə göndərmirik.
Yehuda Katzın bu məqaləsində bind etmənin nə olduğu və JavaScript-də funksiyaların necə işlədiyi haqda izahatlar var.
Niyə funksiyam komponent hər render edildiyi zaman çağrılır?
Funksiyanı komponentə göndərdikdə bu funksiyanı çağırmadığınızdan əmin olun:
render() // Yanlışdır: handleClick funksiyası referans kimi göndərilmək əvəzinə çağrılır! return button onClick=this.handleClick()>>Tıklabutton> >
Bunun əvəzinə, funksiyanın özünü göndərin (mötərizəsiz):
render() // Düzdür: handleClick funksiyası referans kimi göndərilir! return button onClick=this.handleClick>>Tıklabutton> >
Callback və Hadisə işləyicilərinə arqumentləri necə göndərə bilərəm?
Ox funksiyası ilə hadisə işləyicisini əhatə edərək arqumentləri göndərmək mümkündür:
button onClick=() => this.handleClick(id)> />
Bu, .bind funksiyasının çağrılmasına bərabərdir:
button onClick=this.handleClick.bind(this, id)> />
Nümunə: Arqumentləri ox funksiyaları ilə göndərmək
const A = 65 // ASCII hərf kodu class Alphabet extends React.Component constructor(props) super(props); this.state = justClicked: null, letters: Array.from(length: 26>, (_, i) => String.fromCharCode(A + i)) >; > handleClick(letter) this.setState( justClicked: letter >); > render() return ( div> Tıklandı: this.state.justClicked> ul> this.state.letters.map(letter => li key=letter> onClick=() => this.handleClick(letter)>> letter> li> )> ul> div> ) > >
Nümunə: Arqumentləri data-atributları ilə göndərmək
Alternativ olaraq, DOM API-ları istifadə edərək hadisə işləyiciləri üçün lazım olan məlumatları saxlaya bilərsiniz. Böyük sayda elementləri optimallaşdırmaq və ya React.PureComponent yoxlamalarından asılı olan render ağacından istifadə etmək istəyirsinizsə, bu yanaşmanı nəzərə alın.
const A = 65 // ASCII hərf kodu class Alphabet extends React.Component constructor(props) super(props); this.handleClick = this.handleClick.bind(this); this.state = justClicked: null, letters: Array.from(length: 26>, (_, i) => String.fromCharCode(A + i)) >; > handleClick(e) this.setState( justClicked: e.target.dataset.letter >); > render() return ( div> Tıklandı: this.state.justClicked> ul> this.state.letters.map(letter => li key=letter> data-letter=letter> onClick=this.handleClick>> letter> li> )> ul> div> ) > >
Funksiyanın çox tez və ya eyni zamanda bir neçə dəfə çağrılmasının qarşısını necə ala bilərəm?
Əgər onClick və ya onScroll kimi hadisə işləyicilərindən istifadə edir və bu callback-lərin tez çağrılmasının qarşısını almaq istəyirsinizsə, callback-in çağrılma sıxlığını aşağıdakı yollar ilə məhdudlaşdıra bilərsiniz:
- throttle etmə: yenilikləri vaxt tezliyinə görə seçmə (məsələn, _.throttle )
- debounce etmə: bir müddət fəaliyyətsizlik sonra yenilikləri əməl etmə (məsələn, _.debounce )
- requestAnimationFrame ilə throttle etmə: yenilikləri requestAnimationFrame əsasında seçmə (məsələn, raf-schd )
throttle və debounce funksiyaslarının müqayisəsi üçün bu görüntüyə baxın.
Qeyd:
_.debounce , _.throttle və raf-schd funksiyaları gecikən callback-ləri ləğv etmək üçün cancel funksiyası təmin edirlər. Siz bu funksiyanı componentWillUnmount -dan çağırmalı və ya gecikən funksiyanın daxilində komponentin mount olunduğunu yoxlamalısınız.
Throttle etmə, verilən vaxt çərçivəsində funksiyanın birdən çox çağrılmasının qarşısını alır. Aşağıdakı nümunədə “click” işləyicisinin bir saniyə ərzində birdən çox çağrılmasının qarşısı alınır.
import throttle from 'lodash.throttle'; class LoadMoreButton extends React.Component constructor(props) super(props); this.handleClick = this.handleClick.bind(this); this.handleClickThrottled = throttle(this.handleClick, 1000); > componentWillUnmount() this.handleClickThrottled.cancel(); > render() return button onClick=this.handleClickThrottled>>Əlavə yükləbutton>; > handleClick() this.props.loadMore(); > >
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.
import debounce from 'lodash.debounce'; class Searchbox extends React.Component constructor(props) super(props); this.handleChange = this.handleChange.bind(this); this.emitChangeDebounced = debounce(this.emitChange, 250); > componentWillUnmount() this.emitChangeDebounced.cancel(); > render() return ( input type="text" onChange=this.handleChange> placeholder="Axtar. " defaultValue=this.props.value> /> ); > handleChange(e) this.emitChangeDebounced(e.target.value); > emitChange(value) this.props.onChange(value); > >
requestAnimationFrame ilə throttle etmə
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ı throttle etmək üçü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ə 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ə olan nümunəyə baxın.
import rafSchedule from 'raf-schd'; class ScrollListener extends React.Component constructor(props) super(props); this.handleScroll = this.handleScroll.bind(this); // Yenilikləri planlaşdırmaq üçün yeni funksiya yaradın. this.scheduleUpdate = rafSchedule( point => this.props.onScroll(point) ); > handleScroll(e) // 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 >); > componentWillUnmount() // Unmount edildiyi zaman bütün gələcək yenilikləri ləğv edin. this.scheduleUpdate.cancel(); > render() return ( div style= overflow: 'scroll' >> onScroll=this.handleScroll> > img src="/my-huge-image.jpg" /> div> ); > >
Sürətin məhdudlaşdırılmasını test edin
Sürəti məhdudlaşan kodu test etdikdə vaxtı qabağa çəkmək qabiliyyətinin olması faydalı ola bilər. Jest işlədirsinizsə, vaxtı qabağa çəkmək üçün taymer moklarından istifadə edə bilərsiniz. requestAnimationFrame throttle etməsindən istifadə etdikdə animasiya kadrlarını idarə etmək üçün raf-stub alətini faydalı ola bilər.
Blogspotu necə sındıra bilərəm
Eyol.az saytında qeydiyyatdan keçməklə, xaricdə daimi ünvana sahib olun.
Sifariş et
Onlayn mağazalardan alış-veriş edərkən bağlamanızın çatdırılacağı ünvan yerinə sizə təmin etdiyimiz ünvanı daxil edin.
Bağlamanı əldə et
3-5 iş günü ərzində sifarişinizi Bakı anbarımızdan əldə edə və ya kuryer xidmətimizdən istifadə edə bilərsiniz.
Tariflərimiz
Yeniliklər və xəbərlər
Türkiyədən ortopedik yastıq sifarişi
Boyun ağrısından qorunmağın ən yaxşı yolu boynunuzu dəstəkləmək üçün düzgün yuxu vəziyyətində yatmaqdır Ancaq düzgün formada yatmaq tək başına kifayət olmaya bilər
Türkiyədən çanta sifarişi
Çanta dəbin ayrılmaz hissəsidir Hər il yenilənən dəblərlə birlikdə yeni çanta modelləri də dəbə gəlir
Türkiyədən kişilər üçün kostyum sifarişi
Kostyum kişilərin qarderobunun ayrılmaz parçasıdır Daha çox xüsusi gün paltarı sayılsada bəzi iş yerlərinin geyim formasıdır
Hədiyyənizi Amerikadan sifariş edin
Hədiyyə alarkən də diqqət edilməli bir neçə vacib məqam var Bunlaradan birincisi hədiyyənizin fərqli olmasıdır
Comments are closed, but trackbacks and pingbacks are open.