我有一個工作組件,允許複選框全部和複選框。它完美的作品。但是我討厭這個想法,即每次我想要使用這個特性時,都會被困在所有這些代碼中。我正在尋找一種方式來應對這種模塊化?這是否是模塊化和抽象反應組件功能
它並沒有在一個地方模塊化「輸入全部檢查」功能的全部功能。我必須在每次使用時移動getInitialState變量和changeHandlers。
我認爲它就像是如果「輸入複選框全部」功能在HTML中是原生的,我們將如何使用它?我們只需要爲元素提供屬性,並且它們會互相引用,並且所有處理程序都會在引擎蓋下發生,使用起來會很簡單。這個例子的目標是讓HTML級別簡單。我上面展示的代碼沒有實現,因爲它被綁定到函數處理程序和狀態初始值設定項。反應是否提供了一種抽象的方式?
下面是我對這個組件所需的API。
的主要問題是:
- 的組件功能是淡泊的父母,這意味着paren't並不需要存儲的處理程序和狀態的信息。
- 該代碼當前手動跟蹤每個複選框的狀態,這意味着無法動態地查找DOM中有多少複選框,而無需聲明它。
- 整體模塊化和易用性。
下面的代碼:
var InputCheckbox = React.createClass({
getDefaultProps: function() {
return {
checked: false
}
},
render: function() {
return (
<input
checked={this.props.checked}
type='checkbox'
{...this.props}/>
)
}
})
var Test = React.createClass({
getInitialState: function() {
return {
checked: [false, false, false]
}
},
selectAll: function (event) {
// Set all checked states to true
this.setState({
checked: this.state.checked.map(function() {
return event.target.checked
})
})
},
handleChange: function (index, event) {
var checked = this.state.checked
checked[index] = event.target.checked
this.setState({
checked: checked
})
},
render: function() {
var isAllChecked = this.state.checked.filter(function (c) {
return c
}).length === this.state.checked.length
return (
<div>
Select All:
<InputCheckbox onChange={this.selectAll} checked={isAllChecked}/>
<br/>
<InputCheckbox checked={this.state.checked[0]} onChange={this.handleChange.bind(this, 0)}/>
<br/>
<InputCheckbox checked={this.state.checked[1]} onChange={this.handleChange.bind(this, 1)}/>
<br/>
<InputCheckbox checked={this.state.checked[2]} onChange={this.handleChange.bind(this, 2)}/>
<br/>
</div>
)
}
})
React.render(<Test/>, document.body)
理想的情況下我就可以這樣使用它:
var Checkbox = require('./Checkbox')
var Test = React.createClass({
render: function() {
return (
<div>
<Checkbox id="alpha"/>
<Checkbox htmlFor="alpha"/>
<Checkbox htmlFor="alpha"/>
<Checkbox htmlFor="alpha"/>
</div>
)
}
})
現在您有Test組件來管理複選框的狀態。最好將該邏輯移入Store。然後將每個複選框包裝到一個包裝組件中,該組件從商店讀取'checked'狀態並將其作爲道具傳遞到複選框中。 – oluckyman
@oluckyman嘿,你能證明在答案中看起來像什麼嗎? 「包裝每個複選框」有點困惑你的意思。 – ThomasReggi
將數據提取到商店中將與所要求的相反 - 任何鏈接到商店的組件都不能在不同的區域或應用程序中重複使用 – Glenjamin