我试图编写一个函数从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不客气 –