DOMオンクリックでReact Nativeコンポーネント(「Card」という名前)を削除する関数を作成しようとしていて、同じクラスの新しい「Card」を異なるプロパティで追加しようとしています。たとえば、両方のカードに背景色があります。最初のカードが緑色の場合、青色の背景になるはずの2枚目のカードは、元のカードの緑色の背景を継承します。作品removeCard、:追加Reactネイティブコンポーネントが再レンダリングされない
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>
);
}
}
だから私は2つのボタンが持っている:
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>
)
}
}
主成分次のようになります。そうは次のように
カードは、小道具として渡された彼らの背景色を受け取ります素晴らしい、そしてchangeCard。 「Remove Card」を押して「Change Card」を押すと、私が探している正確な結果が表示されます。カードは取り外され、新しいカードに交換されます。しかし、私はchangeCardに次の行にコメントしている場合:
// let emptyArray = [];
// this.setState({cardArray: emptyArray});
を押し、「変更カード」を押さずに「カードを取り外し、」新しいカードは、新しいイメージを持っていますが、それは前のカードの背景色を保持します。これはchangeCardからthis.removeCard()を呼び出す場合にも発生します。
要約すると、これらの機能の両方の動作を同時に実行できるようにしたいと思いますが、両方のボタンを別々に押すと、カードを取り外して正しくレンダリングされた新しいカードを追加できます。
どのようなアイデアも大歓迎です!
カードの状態とは対照的に、小道具をインラインで渡すバックグラウンドスタイルを設定してください。ありがとうございました! –
@BrianMcGoughようこそ –