我試圖編寫一個函數從DOM上點擊刪除一個React Native組件(名爲「Card」),然後在不同屬性中添加一個新的「Card」 。例如,兩張卡片都有背景顏色。如果第一張卡片是綠色的,則應該有藍色背景的第二張卡片將繼承原始卡片的綠色背景。附加的反應本地組件不重新渲染
的卡接收其背景顏色爲道具過去了,就像這樣:
class Card extends Component {
constructor(props) {
super(props);
this.state = {
style: {
backgroundColor: this.props.card.backgroundColor
}
};
}
render() {
return (
<TouchableHighlight style={this.state.style}>
<Image source={this.props.card.img} />
</TouchableHighlight>
)
}
}
主要成分是這樣的:
class SetProject extends Component {
constructor(props) {
super(props);
this.state = {
cardArray: [{backgroundColor: 'green', img: require('~/SetProject/cardImages/ovals/1-red-empty-oval.png')}]
}
}
removeCard(){
let emptyArray = [];
this.setState({cardArray: emptyArray});
}
changeCard(){
// let emptyArray = [];
// this.setState({cardArray: emptyArray});
let newCardArray = [{backgroundColor: 'red', img: require('~/SetProject/cardImages/ovals/1-purple-shaded-oval.png')}]
this.setState({cardArray: newCardArray});
}
render() {
let cardElementArray = this.state.cardArray.map(theCard => {
return (
<Card card={theCard}></Card>
);
});
return (
<View>
<View>
{cardElementArray}
</View>
<TouchableHighlight>
<Text onPress={this.removeCard.bind(this)}>Remove Card</Text>
</TouchableHighlight>
<TouchableHighlight>
<Text onPress={this.changeCard.bind(this)}>Change Background</Text>
</TouchableHighlight>
</View>
);
}
}
所以我有兩個按鈕:removeCard,其中工程很棒,換卡。如果我按「刪除卡」然後按「更改卡」,我看到我正在尋找的確切結果。該卡被移除並被新的替換。但是,如果我在changeCard這些線路點評:不按
// let emptyArray = [];
// this.setState({cardArray: emptyArray});
,然後按「更改卡」「刪除卡」的新卡有一個新的形象,但它會保持以前的卡的背景顏色。如果我從changeCard調用this.removeCard(),也會發生這種情況。總之,我希望能夠同時執行這兩個功能的行爲,但是我只能刪除卡並添加一張新的,正確渲染的卡,如果我單獨按下兩個按鈕的話。
任何想法將不勝感激!
設置背景風格傳遞道具內聯,而不是在卡的狀態,它的工作,謝謝! –
@BrianMcGough不客氣 –