在用react寫checkbox的時(shí)候醋奠,遇到了一點(diǎn)問題:
checkbox是動(dòng)態(tài)生成的,最開始全部默認(rèn)選中,點(diǎn)擊某個(gè)checkbox乌奇,該checkbox的checked值發(fā)生改變,其他的保持不變眯娱;我寫的是點(diǎn)擊某一個(gè)checkbox礁苗,所有的都會(huì)發(fā)生改變,因?yàn)槲易畛踅o定的checked的狀態(tài)都是一樣的。
解決方法:
在生成checkbox之后,給定每個(gè)checkbox一個(gè)不同的狀態(tài)
上圖是動(dòng)態(tài)生成checkbox的代碼攒庵,大家可以看到我標(biāo)記的部分,也是關(guān)鍵處笙蒙,我給checked賦予了一個(gè)值item.checked,原本item中是沒有checked的,是我在獲取到this.props.wSpecial(wSpecial是我存在store中的state考廉,它與下面的 game[index].config.wSpecialKind是一樣的)這個(gè)數(shù)組的時(shí)候動(dòng)態(tài)加上去的。
上圖是動(dòng)態(tài)生成checked的代碼昌粤,通過循環(huán)給game[index].config.wSpecialKind添加上checked既绕,并且全部設(shè)為true,然后在動(dòng)態(tài)生成checkbox的時(shí)候可以獲取到checked字段涮坐,即1圖中的item.checked凄贩,然后將其賦給checked屬性,這樣就實(shí)現(xiàn)了在最開始的時(shí)候所有的checkbox默認(rèn)選中袱讹。
接下來就是要處理點(diǎn)擊某一個(gè)checkbox疲扎,checked值發(fā)生改變了;這個(gè)處理在onChange方法中捷雕。
在圖3中,可以看到在if/else判斷里面救巷,將checked的值改變了壶熏,改變之后記得更新state,因?yàn)槲业膕tate是存在store中的浦译,所以寫了一個(gè)方法來更新棒假,相信熟悉redux的,對下面的兩個(gè)圖很容易理解管怠;在圖3中淆衷,我沒有理解為什么要寫this.setState(),個(gè)人覺得它沒有用上,但是不寫的話渤弛,雖然checkbox的checked值會(huì)發(fā)生改變祝拯,但是checkbox依舊是處在被選中的狀態(tài),只有加上才會(huì)有改變她肯。
以上就是我對checkbox問題的處理佳头,我知道還有很多地方需要改進(jìn),可能在表述方面也有一些不清楚晴氨,希望各位可以多提一些建議康嘉,我會(huì)繼續(xù)改進(jìn)的!W亚啊亭珍!