レコードを一覧表示し、<button>
要素を介してレコードを切り替え(非表示と非表示)できるようにするReactコンポーネントを実装しました。
次に、各リストアイテムにある個別のスイッチ/ボタンを使用して、各リストアイテムの画像を切り替え/非表示/再表示する必要があります。

私は現在、リストアイテムごとに画像の表示を切り替えるために次のコードを持っています:
hideUnhidePhoto(id) {
const newData = this.state.data.map(item => {
if(item.id === id) {
return { ...item, photoVisible: !item.photoVisible};
}
return item;
})
this.setState({
data: newData
});
}
そして、<a>
クリックイベントを介して画像の表示を制御できるようにするこのアンカー要素があります。
<a style={{color: 'red'}} onClick={this.hideUnhidePhoto.bind(this, post.id)}>
Hide/Unhide Photo
</a>
問題:
私の問題は、写真だけの表示を切り替えるのではなく、[写真の非表示/再表示]ボタンをクリックするたびに、このボタンをクリックするとリスト内のすべてのアイテムが非表示になることです。
私の試み:
import React, { Component, Fragment } from "react";
import { render } from "react-dom";
class Focus extends React.Component {
constructor(props) {
super(props);
this.state = {
data: [],
shown: true,
};
}
componentDidMount() {
this.setState({
data: [
{ id: "1", title: "my first title", image: "http://localhost/1.png", visible: true , photoVisible: true},
{ id: "2", title: "my second title", image: "http://localhost/2.png", visible: true, photoVisible: true},
{ id: "3", title: "my third title", image: "http://localhost/3.png", visible: true, photoVisible: true}
]
});
}
toggle(id) {
const newData = this.state.data.map(item => {
if(item.id === id) {
return { ...item, visible: !item.visible};
}
return item;
})
this.setState({
data: newData
});
}
hideUnhidePhoto(id) {
const newData = this.state.data.map(item => {
if(item.id === id) {
return { ...item, photoVisible: !item.photoVisible};
}
return item;
})
this.setState({
data: newData
});
}
render() {
return (
<div>
<label>
<ul>
{this.state.data.map((post, i) => (
<li key={i}>
<div style={{ display: post.visible ? "none" : "block"}}>
<b>Post Data:</b> {post.title} --{post.id} <br />
<a style={{color: 'red'}} onClick={this.hideUnhidePhoto.bind(this, post.id)}> Hide/Unhide Photo </a><br />
<div style={{ display: post.visible1 ? "none" : "block"}}>
<img src={post.image} />
</div>
</div>
<button onClick={this.toggle.bind(this, post.id)}>Toggle ({post.id}) </button>
<br />
</li>
))}
</ul>
</label>
</div>
);
}
}