実現したいこと
reactでコンポーネント内のボタンをクリックした時に親コンポーネントを非表示にしたいです。
また、コンポーネントがmapでデータを並べているのでそれぞれに対応したものを非表示にしたいです。
コード
tsx
1const HandleClickDelete = (e) => { 2//コンポーネントの削除 3} 4 5return ( 6 {data.map((item, index) => ( 7 <div key={index}> {/*これごと消したい*/} 8 <p>Hello World</p> 9 <button onClick={HandleClickDelete}>Delete</button> 10 </div> 11 ))} 12)
試したこと
HandleClickDeleteでevent.targetから操作をするとbuttonのみが消えてしまいます。
「event.targetから操作」って生 DOM をいじってますか? React でそれは良くないですね。
data.map(item => …) ってことは、削除ボタンが押されたらその item を data から消したいのでは…。
display: noneのstyleを追加して非表示にしています。
dataから消したいというよりは画面上から表示を消したいです。
React の基本的な考え方は、データが変わると結果として表示も変わる、ということです。なので、表示しないなら、単に表示しなければいいのではなく、「表示しない」ことをデータとしてどこかに持ち、かつそのデータが変更されたことによって表示が更新されるようにします。
具体的な方法は、各 item に表示・非表示のフラグを持たせるか、表示しない item のリストを別途持つ、などでしょうか。
各 item に表示・非表示のフラグを持たせる場合、フラグを更新をしようとした時にdataの配列をstateとして保持しなければいけなくなりませんか?
具体的にdataはAPIからgetしたオブジェクト型のデータなのですが、それをdataとflagを持つオブジェクトに入れ直してstateで管理するというイメージでしょうか?
表示するかしないかという情報は、立派な state なので、ちゃんと state として管理する必要があるということです。
data をいじりたくないということであれば、表示するかしないかという情報を別途持つことも可能です。
回答1件
あなたの回答
tips
プレビュー