React: Buka data baris yang diklik sahaja
P粉627027031
P粉627027031 2024-02-26 19:47:12
0
1
348

Saya menentukan pembolehubah keadaan bernama fullText.

fullText 默认值为 false Nilai lalai ialah false.

Apabila teks penuh diklik, saya mahu menyongsangkan nilai keadaan saya dan menjadikan teks boleh ditutup dan dibuka. Tetapi apabila diklik, teks semua baris dalam jadual terbuka, bagaimana saya boleh menjadikannya khusus baris?

{
  !this.state.fullText ?

       <div onClick={() => this.setState({ fullText: !this.state.fullText })} 
       className="text-primary cursor-pointer font-size-14 mt-2 px-2"  
        key={props.data?.id}>
                Full Text 
        </div>
         :
         <>
       <div onClick={() => this.setState({ fullText: !this.state.fullText 
          })}className="text-primary cursor-pointer font-size-14 mt-2 px-2" 
          key={props.data?.id}>
                 Short Text 
       </div>
               <span>{ props.data?.caption}</span>
        </>
          }

P粉627027031
P粉627027031

membalas semua(1)
P粉198814372

Nampaknya contoh kod dalam soalan diulang untuk setiap baris, tetapi hanya 1 keadaan fullText (CodeSandbox 中的 showMore) adalah perkara biasa bagi kesemuanya. Jadi mereka semua menghidupkan atau mematikan bersama-sama.

Jika anda mahu setiap baris mempunyai fungsi buka/tutup yang berasingan, maka anda memerlukan 1 keadaan sedemikian bagi setiap baris. Penyelesaian mudah adalah dengan membenamkan status ini ke dalam data setiap baris:

export default class App extends Component {
  state = {
    data: [
      {
        id: 1,
        description: "aaaaa",
        showMore: false // Initially closed
      },
      // etc.
    ]
  };

  render() {
    return (
      
        {this.state.data.map((e) => (
          
            { /* Read the showMore state of the row, instead of a shared state */
              e.showMore === false ? (
              
this.setState({ data: changeShow(this.state.data, e.id, true) })}> Show description{" "}
) : (
this.setState({ data: changeShow(this.state.data, e.id, false) })}> Show less{" "}
{e.description} > )} > ))} > ); } } /** * Update the showMore property of the * row with the given id. */ function changeShow(data, id, show) { for (const row of data) { if (row.id === id) { // Find the matching row id row.showMore = show; // Update the property } } return data; }
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!