1
我已經實現了一個View組件,其中包含一個FlatList,它呈現TouchableHighlights。另外我實現了一個Modal組件,我想在各個位置導入這些組件,包括呈現FlatList的組件。如何將道具從FlatList項目傳遞給Modal?
我已經設法從外部打開模式(通過移交一個可見性通道,通過nextProps訪問它並將模態狀態值設置爲「modalVisible」)並從內部關閉它(只需通過更改其狀態值「modalVisible」)。
但我也想從每個FlatLists項目傳遞數據到模態。呈現爲TouchableHighlight的項目應該打開模式onPress,模式應該包含來自項目的數據(在下面的代碼中將是項目ID)。我怎樣才能將數據傳遞給模態?我以某種方式無法使用nextProps工作。這看起來更像是一個與從FlatLists項目而不是Modal設置狀態相關的問題。
模態:
export default class ModalView extends React.Component {
constructor() {
super();
this.state = {
modalVisible: false,
id: null,
};
}
componentWillReceiveProps(nextProps) {
this.setState({
modalVisible: nextProps.modalVisible,
id: nextProps.id,
})
}
render() {
return (
<Modal
animationType="slide"
transparent={ true }
visible={ this.state.modalVisible }
onRequestClose={() => { this.props.setModalVisible(false) }}
>
<View>
<View>
<Text>{ this.state.id }</Text>
<TouchableHighlight
onPress={() => { this.props.setModalVisible(false) }}
>
<Text>Hide Modal</Text>
</TouchableHighlight>
</View>
</View>
</Modal>
)
}
}
FlatList渲染TouchableHighlights:
export default class RecentList extends React.Component {
constructor() {
super();
this.state = {
modalVisible: false,
id: null,
}
}
_onPressItem(id) {
this.setState({
modalVisible: true,
id: id,
});
};
_renderItem = ({item}) => {
return (
<TouchableHighlight
id={item.id}
onPress={this._onPressItem}
>
<View>
<Text>{id}</Text>
</View>
</TouchableHighlight>
)
};
render() {
let data = realm.objects('Example').filtered('completed = true')
.sorted('startedAt', true).slice(0, 10)
return (
<View>
<ModalView
modalVisible={ this.state.modalVisible }
setModalVisible={ (vis) => { this.setModalVisible(vis) }}
id={ this.state.id }
/>
<FlatList
data={data}
renderItem={this._renderItem}
keyExtractor={(item, index) => index}
/>
</View>
)
}
}
也許值得一提的還有[**爲什麼箭React渲染中的函數和綁定是有問題的**](https://medium.freecodecamp.org/why-arrow-functions-and-bind-in-reacts-rend呃 - 是 - 問題 - f1c08b060e36)。 –