JSX 條件判斷,判斷 eventList、auctionList、subscriptionList、conferenceList 和 dividendList 都是空值時自動略過該 calendarEntries 的顯示。 (筆記)

當eventList,auctionList,subscriptionList,conferenceList,dividendList都無資料時calendarEntries自動略過,可以在 JSX 中加入條件判斷,確保當 eventList、auctionList、subscriptionList、conferenceList 和 dividendList 都是空值的時候自動讓上層的 calendarEntries 略過。將整個 entry 元件的渲染包在條件檢查內,這樣當沒有任何有效資料時就不會渲染該區塊。 這樣當所有的列表都為空時,該 entry 就會被自動略過,不會渲染到畫面上。

原本寫法

 <div className='bg-white shadow-lg rounded-xl p-8 mb-8'>
        {/* 新增顯示所有行事曆事件的區塊 */}
        <h2 className='text-3xl font-bold text-gray-800 mb-4'>
          財經行事曆事件
        </h2>
        <div className='grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6'>
          {calendarEntries.map((entry, index) => (
            <div
              key={index}
              className='bg-white shadow-lg rounded-xl p-6 transition hover:-translate-y-1'>
              <h3 className='text-xl font-semibold text-gray-700 mb-4'>
                日期: {entry.date}
              </h3>
              {entry.eventList?.length > 0 && (
                <div>
                  <h4 className='font-medium text-gray-600 mb-2 mt-2'>
                    活動列表:
                  </h4>
                  <ul className='list-decimal list-inside text-gray-600'>
                    {entry.eventList.map((event, idx) => (
                      <li key={idx}>
                        <a href={event.linkUrl} className='hover:underline'>
                          {event.title}
                        </a>
                      </li>
                    ))}
                  </ul>
                </div>
              )}
              {entry.auctionList?.length > 0 && (
                <div>
                  <h4 className='font-medium text-gray-600 mb-2 mt-2'>
                    競拍列表:
                  </h4>
                  <ul className='list-decimal list-inside text-gray-600'>
                    {entry.auctionList.map((auction, idx) => (
                      <li key={idx}>
                        <a href={auction.linkUrl} className='hover:underline'>
                          {auction.company} (股票代號: {auction.stkNo})
                        </a>
                      </li>
                    ))}
                  </ul>
                </div>
              )}
              {entry.subscriptionList?.length > 0 && (
                <div>
                  <h4 className='font-medium text-gray-600 mb-2 mt-2'>
                    申購列表:
                  </h4>
                  <ul className='list-decimal list-inside text-gray-600'>
                    {entry.subscriptionList.map((subscription, idx) => (
                      <li key={idx}>
                        <a
                          href={subscription.linkUrl}
                          className='hover:underline'>
                          {subscription.company} (股票代號: {subscription.stkNo}
                          )
                        </a>
                      </li>
                    ))}
                  </ul>
                </div>
              )}
              {entry.conferenceList?.length > 0 && (
                <div>
                  <h4 className='font-medium text-gray-600 mb-2 mt-2'>
                    法說會列表:
                  </h4>
                  <ul className='list-decimal list-inside text-gray-600'>
                    {entry.conferenceList.map((conference, idx) => (
                      <li key={idx}>
                        <a
                          href={conference.linkUrl}
                          className='hover:underline'>
                          {conference.company} (股票代號: {conference.stkNo})
                        </a>
                      </li>
                    ))}
                  </ul>
                </div>
              )}
              {entry.dividendList?.length > 0 && (
                <div>
                  <h4 className='font-medium text-gray-600 mb-2 mt-2'>
                    除權息列表:
                  </h4>
                  <ul className='list-decimal list-inside text-gray-600'>
                    {entry.dividendList.map((dividend, idx) => (
                      <li key={idx}>
                        <a href={dividend.linkUrl} className='hover:underline'>
                          {dividend.company} (股票代號: {dividend.stkNo})
                        </a>
                      </li>
                    ))}
                  </ul>
                </div>
              )}
            </div>
          ))}
        </div>
      </div>

調整後寫法

<div className='bg-white shadow-lg rounded-xl p-8 mb-8'>
  {/* 新增顯示所有行事曆事件的區塊 */}
  <h2 className='text-3xl font-bold text-gray-800 mb-4'>財經行事曆事件</h2>
  <div className='grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6'>
    {calendarEntries
      .filter(
        (entry) =>
          entry.eventList?.length > 0 ||
          entry.auctionList?.length > 0 ||
          entry.subscriptionList?.length > 0 ||
          entry.conferenceList?.length > 0 ||
          entry.dividendList?.length > 0
      )
      .map((entry, index) => (
        <div
          key={index}
          className='bg-white shadow-lg rounded-xl p-6 transition hover:-translate-y-1'>
          <h3 className='text-xl font-semibold text-gray-700 mb-4'>日期: {entry.date}</h3>

          {entry.eventList?.length > 0 && (
            <div>
              <h4 className='font-medium text-gray-600 mb-2 mt-2'>活動列表:</h4>
              <ul className='list-decimal list-inside text-gray-600'>
                {entry.eventList.map((event, idx) => (
                  <li key={idx}>
                    <a href={event.linkUrl} className='hover:underline'>
                      {event.title}
                    </a>
                  </li>
                ))}
              </ul>
            </div>
          )}

          {entry.auctionList?.length > 0 && (
            <div>
              <h4 className='font-medium text-gray-600 mb-2 mt-2'>競拍列表:</h4>
              <ul className='list-decimal list-inside text-gray-600'>
                {entry.auctionList.map((auction, idx) => (
                  <li key={idx}>
                    <a href={auction.linkUrl} className='hover:underline'>
                      {auction.company} (股票代號: {auction.stkNo})
                    </a>
                  </li>
                ))}
              </ul>
            </div>
          )}

          {entry.subscriptionList?.length > 0 && (
            <div>
              <h4 className='font-medium text-gray-600 mb-2 mt-2'>申購列表:</h4>
              <ul className='list-decimal list-inside text-gray-600'>
                {entry.subscriptionList.map((subscription, idx) => (
                  <li key={idx}>
                    <a href={subscription.linkUrl} className='hover:underline'>
                      {subscription.company} (股票代號: {subscription.stkNo})
                    </a>
                  </li>
                ))}
              </ul>
            </div>
          )}

          {entry.conferenceList?.length > 0 && (
            <div>
              <h4 className='font-medium text-gray-600 mb-2 mt-2'>法說會列表:</h4>
              <ul className='list-decimal list-inside text-gray-600'>
                {entry.conferenceList.map((conference, idx) => (
                  <li key={idx}>
                    <a href={conference.linkUrl} className='hover:underline'>
                      {conference.company} (股票代號: {conference.stkNo})
                    </a>
                  </li>
                ))}
              </ul>
            </div>
          )}

          {entry.dividendList?.length > 0 && (
            <div>
              <h4 className='font-medium text-gray-600 mb-2 mt-2'>除權息列表:</h4>
              <ul className='list-decimal list-inside text-gray-600'>
                {entry.dividendList.map((dividend, idx) => (
                  <li key={idx}>
                    <a href={dividend.linkUrl} className='hover:underline'>
                      {dividend.company} (股票代號: {dividend.stkNo})
                    </a>
                  </li>
                ))}
              </ul>
            </div>
          )}
        </div>
      ))}
  </div>
</div>

+ There are no comments

Add yours

發表迴響