所有你需要在父組件定義的狀態,對應於你的輸入組件的disabled
屬性首先,讓我們叫它this.state.isInputDisabled
。因此,有,你可以把它作爲一個prop
:
<Form>
<FormItem>
<Input isDisabled={this.state.isInputDisabled}></Input>
</FormItem>
<Input isDisabled={this.state.isInputDisabled}></Input>
<MyInput isDisabled={this.state.isInputDisabled}></MyInput>
</Form>
然後當你在父組件改變狀態,你同樣需要更新的孩子。要對覆蓋componentWillReceiveProps
方法,例如:
class MyInput extends React.Component {
componentWillReceiveProps(nextProps) {
this.forceUpdate();
}
render() {
return <input type="text" disabled={this.props.isDisabled} />
}
}
爲了回答您的評論:
什麼一段代碼,你真的希望爲您處理disabled
屬性?還有另外兩種方式來管理從父兒童的國家我能想到的:在refs
Store中引用輸入組件,並在父管理它們(但這又涉及額外的prop
要避免)。
授予特定HTML類渲染成分,只是用香草JS來更新disabled
道具:
function toggleInputDisabled(disable) {
document
.getElementsByClassName('your-input-class')
.forEach(elem => elem.disabled = disable);
}
使用香草JS不作出反應禁止的,但它被認爲是不好的做法,你應該只有當你看到沒有簡單的出路時纔去做。
thx for reply。我的問題是自動添加'disabled'道具。所以當我刪除或添加'輸入'組件時,我不應該關注被禁用的道具。對不起,我沒有說清楚。 –
我用一些你可能會覺得有用的信息更新了我的答案,希望它能消除你的疑惑。 – Nhor
'香草JS'似乎對我很好。因爲我只想將所有表單項設置爲只讀。當用戶點擊'edit'按鈕時,我應該刪除'disable'屬性。 –