我對React和複選框有一個非常惱人的問題。我正在使用的應用程序需要一個複選框列表,這些複選框表示在後端保留的設置。 有一個選項可將設置恢復到原始狀態。在React中設置複選框「檢查」屬性
首先,我創建了一個組件,其中包含一個像設置圖一樣的對象。每個設置都有一個鍵和一個布爾值。因此:
{
bubbles: true,
gregory: false
}
是爲表示:
<input type="checkbox" value="bubbles" checked="checked" />
<input type="checkbox" value="gregory" />
現在看來陣營是無知一個複選框應該是怎樣工作的。我不想設置複選框的值,我想要「checked」屬性。
但是,如果我嘗試這樣的事:
<input
type="checkbox"
value={setting}
checked={this.settings[setting]}
onChange={this.onChangeAction.bind(this)}
/>
我得到這樣的警告:
警告:AwesomeComponent正在改變類型複選框的不受控制的輸入進行控制。輸入元素不應從非受控狀態切換爲受控狀態(反之亦然)。決定在組件的使用期限內使用受控或不受控制的輸入元素。更多信息:一些無用的文檔頁面我看了幾次無果]
所以我決定創建另一個組件包裹每一個人複選框,我得到這個:
<input
type="checkbox"
checked={this.state.checked}
onChange={this.onChangeAction.bind(this)}
/>
現在checked
是直接在我的州存在的財產。
這就產生了同樣的警告,所以我嘗試使用defaultChecked
:
<input
type="checkbox"
defaultChecked={this.state.checked}
onChange={this.onChangeAction.bind(this)}
/>
這使得警告消失,但現在是無法將checked
值重置爲默認的。所以我試着玩componentWillReceiveProps
這個方法,這樣我很確定我的狀態是正確的,this.state.checked
是正確的,組件再次呈現。
它的確如此。但是複選框仍然保持原樣。 現在我留下了那個醜陋的警告,我正在使用checked
。 我該如何解決這個問題,讓警告消失?
我在想,也許有辦法強制重新渲染組件,所以它會捕獲新的值並使用它。但我不知道該怎麼做。也許這個組件禁止警告只有?那可能嗎?也許還有別的可以做的事情?
在浪費了,因爲我想我明白這個問題一個小時,由於從反應的非常具體的警告信息:只需用價值
false
爲checked
託您的CheckBox組件的添加defaultProps屬性。不。這是後來定義的未定義變量。謝謝。 – Don我無法大拇指這個答案。我有條件地添加和刪除'checked'屬性本身,這在簡單的HTML日子裏是很好的做法。我花了20分鐘疑惑爲什麼這個錯誤消息正在發生。 ReactJS錯誤消息確實應該有一個特殊情況,承認不一致的古怪,即HTML複選框輸入,以便其他人不會遇到這種情況。 –
令人難以置信的答案:)這是一個很好的技巧,我不知道(使用雙重轟擊立即轉換爲布爾值) –