1. 程式人生 > >React 複用元件 含表單radio/checkbox注意的問題

React 複用元件 含表單radio/checkbox注意的問題

一.問題描述:

上週使用React在做一個後臺管理的前端UI介面,應該沒什麼問題,結果,在聯調時,發現在對同一個元件引用多次後,表單控制元件會“串聯“。。。直接上圖還是比較好呢。。。


其中A,B,C都是單選按鈕,是同一個元件,在不同地方的多次複用 !但是在,不同調用時候,會相互影響。

二.問題分析:

(1)由於新建和修改的結構以及要傳回介面的資料是一模一樣的,所以就選擇在搭結構的時候複用元件。因為是複用元件,所以在遇到這個bug時,一直以為是由於元件的複用,state裡的狀態發生被共享了,然後查了很多資料找了很多例子來試,都沒能解決這個問題。。。然後就鬱悶了。。

(2)在查資料的過程中看到了一個不錯的除錯React的工具,果斷安裝。(工具名字是:React Developer Tools

,瀏覽器:Chrome),安裝之後,驚喜發現,通過它可以看到元件裡的state和function, 截圖如下:

“新建“-元件狀態:

”修改“-元件狀態:(列表裡不只一個數據,為了更好的看出元件state變化,多貼兩個元件狀態)

   

因此可以看到,元件的複用不會共享狀態,所以。。。之前的思路完全搞錯啦!驚恐驚恐驚恐

(3)後來拋棄state會共享這一錯誤想法後,仔細檢視審查程式碼後發現,

input 是radio/checkbox的表單,不管單選還是多選,都有一個name,

在複用元件時,state是根據元件的,在元件生命週期內有效的,即使名字相同,state也不會共享。

但是type=radio/checkbox的input,name是相對頁面的,因為它是html程式碼,沒有生命週期的,名字相同,就會認為是同一組的單選/多選的按鈕,因此,要在複用元件時,要給name新增相應的編號,以區分不同。

三.解決問題:

複用元件時,注意表單的name的值。