我有一個選項列表,其中包含複選框和父按鈕ListView
中的完成按鈕。當完成按鈕被按下時,我想知道哪個複選框被選中。如何使用React-Native獲得父級ListView組件中子複選框組件的狀態?
我應該補充一點,我嘗試使用ChildCheckBox
的回調函數來維護ListView
中的選中框的數組。它工作正常,除非導航回到ListView
,陣列將被重置,而複選框仍然出現在檢查。我寧願讓onDonePress()
函數只是查詢哪些框被檢查,然後在那個時候作出相應的響應,而不是依賴維護一個數組的ListView
。
這裏是ListView
:
class ParentListView extends Component {
constructor(props) {
super(props);
this.state = {
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2,
}),
};
}
componentDidMount() {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(ROW_DATA),
});
}
onCheckPress() {
console.log('Check Pressed')
// callback from ChildCheckBoxCell...?
}
onDonePress() {
console.log('Done pressed')
// callback from ChildDoneCell...?
}
render() {
return (
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow.bind(this)}
style={styles.listView}
/>
);
}
renderRow(cell) {
if (cell.type === 'ChildCheckBoxCell') {
return (
<ChildCheckBoxCell onChange={() => this.onCheckPress()} />
);
}
if (cell.type === 'ChildDoneCell') {
return (
<ChildDoneCell onDonePress={() => this.onDonePress()}/>
);
}
}
}
這裏是ChildCheckBoxCell
組件:
class ChildCheckBoxCell extends Component {
constructor(props) {
super(props);
this.state = {
isChecked: false,
};
}
onChange() {
this.setState({isChecked: !this.state.isChecked});
//Callback...
this.props.onChange();
}
render() {
return (
<TouchableHighlight onPress={() => this.onChange()}>
<Text>{this.state.isChecked? 'Checked' : 'UnChecked'}</Text>
</TouchableHighlight>
);
}
}
最後,這裏是ChildDoneCell
組件
class ChildDoneCell extends Component {
onDonePress() {
//Callback...
this.props.onDonePress();
}
render() {
return (
<TouchableHighlight onPress={() => this.onDonePress()}>
<Text>DONE</Text>
</TouchableHighlight>
);
}
}
提前感謝!
感謝您的非常詳細的答案!我剛剛嘗試過實現它,出於某種原因,CheckboxCell不響應listView中所做的更改。在第1步中,我有'cell.isChecked =!cell.isChecked',但組件並不響應這些更改。另外,'ComponentWillReceiveProps()'不會在'CheckBoxCell'中被調用。 –
更新數據源時,必須使用cloneWithRows。你是否熟悉它? – rclai
缺失的鏈接是我沒有更新數據源,我現在就試試,謝謝 –