0
<CardDetails />
コンポーネントのうち、親がクリックされたコンポーネントを1つだけ表示するにはどうすればよいですか?コードを実行すると、状態を変更した後、すべてのCardDetailsコンポーネントがレンダリングされます。独自のonclickイベントと各コンポーネントの状態を追加する代わりに、別の方法がありますか?状態を変更した後に1つのコンポーネントだけをレンダリングする方法はありますか?
class Deck extends React.Component {
constructor(props) {
super(props);
this.state = {
cardDetails: false
};
// This binding is necessary to make `this` work in the callback
this.handleClick = this.handleClick.bind(this);
this.onClick = this.onClick.bind(this);
}
onClick() {
this.setState({
cardDetails: true,
// when cardDetails is set as true, all <CardDetails /> components are rendered
}, function() {
console.log('cardDetails: ' + this.state.cardDetails + '. This.onclick: ' + this.onClick)
});
}
render() {
return (< div className = "deck-container" > < div className = "chosen-cards" >
<CardHistory onClick = {
this.onClick
} > {
this.state.cardDetails ? < CardDetails/> : null
} < /CardHistory>
< CardHistory onClick = {this.onClick} > {
this.state.cardDetails ? < CardDetails/> : null
} < /CardHistory> </div > < /div>);}}
ReactDOM.render(<Deck> < /Deck>,document.getElementById('root'));
'shouldComponentUpdate'メソッドを' class CardDetails extends React.Component {} 'に追加し、this.state.cardDetailsからthis.props.cardDetailsに変更することができますか?私は反応が新しく、少し遅いです。前もって感謝します。 – zaebalo
親コンポーネントはそのまま使用してください。 を宣言している間に を宣言すると、カード内の詳細コンポーネントにthis.props.cardDetailsにアクセスできるようになります。したがって、親コンポーネントの変更によって、小道具の値が変更され、CardDetailsコンポーネントが再描画されます。カードの詳細コンポーネントでfalseを返すことで、再レンダリングを防ぐことができます。では、いつレンダリングしないかは、props.cardDetailsの値が変更されたときです。 –
ええ、それでも で複数のすべてのコンポーネントをレンダリングします。たぶん私は何か間違ったことをしました –
zaebalo