想請問一下各位大神ReactJS的問題. 有寫了一個js檔案給Component引用,我想在js檔裡面中去更改this.state,但是js檔中的this是指到function本身,有辦法可以set

1 year ago 9 Replies
王副社
5 years ago

想請問一下各位大神ReactJS的問題.

有寫了一個js檔案給Component引用,我想在js檔裡面中去更改this.state,但是js檔中的this是指到function本身,有辦法可以set Component中的state嗎?謝謝

4 Likes

Replies

Aegg Li 5 years ago

https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

0 Likes
Mickeo Leung 5 years ago

簡單show 一下你的js code 吧

0 Likes
Aegg Li 5 years ago

https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Functions/Arrow_functions

0 Likes
王副社 5 years ago

Mickeo Leung 我簡化整理成這樣 https://gist.github.com/Hsueh-Jen/c1879f3e6ba21e4c949af81ff73e0c1a

李正偉 (Aegg Li) 我再研究看看,感謝

0 Likes
Mickeo Leung (5 years ago)

不考慮把this.state 以一個argument pass 到validator 嗎? 不然validator 是stateless and reusable for any class 情理上不應該會有神奇的scope 在背後把scope pass 過去吧。

王副社 (5 years ago)

因為validator在宣告後,會很常用到valdiate(),而且會一直setState,抱歉在sample code漏掉這段,總之就是在validator裡面會很常取用this.state跟this.setState,才想說有沒有辦法可以直接越級去抓到外層的this.state。

Mickeo Leung (5 years ago)

我的想法是new validator 時就把this.state pass 過去。 在validator 是用pass 過去的local state 去做comparison 而不是直接的用this.state。其他code 的調用和流程應該沒有分別吧。 如果想連setState 也用到就either pass 整個this 或者加一個attribute 我感覺這樣做會少了奇怪的dependency。

Mickeo Leung (5 years ago)

反而我覺得rule 應該是在validate function 才pass 過去把。那就可以reuse validator for 不同的rule 的validation

王副社 (5 years ago)

我的想法是validator建立時就把規則給他,我會這個頁面中作各種驗證,可能會驗證多個欄位,或是只驗證某一個,所以每次都pass會很麻煩,確實這麼做會有很高的依賴性。

不過pass this進去,好像是reference,所以其實問題好像就解決了,感謝你