cari

Rumah  >  Soal Jawab  >  teks badan

React: Buka data baris yang diklik sahaja

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粉627027031P粉627027031276 hari yang lalu364

membalas semua(1)saya akan balas

  • P粉198814372

    P粉1988143722024-02-27 16:05:28

    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; }

    balas
    0
  • Batalbalas