第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何切換超過 1 個列表元素的 className?

如何切換超過 1 個列表元素的 className?

Smart貓小萌 2023-08-24 17:31:37
我有一個名為 NavMain.js 的父組件和一個名為 NavEventDate.js 的子組件。我使用 props 將一些數(shù)據(jù)從父組件傳遞到子組件。當渲染子組件時,我只希望第一個<li>元素具有className="selected",然后通過單擊其他<li>元素,我只希望單擊的元素具有className="selected",其他<li>元素具有className=""。(關(guān)閉)這張圖片解釋了它現(xiàn)在是如何工作的所以如果我單擊元素,除非我單擊兩次,否則<li>所有元素都會保留。className="selected"這是我的代碼沙箱:https://codesandbox.io/s/romantic-heisenberg-pg9x6 ?file=/NavMain.js父組件的邏輯并不重要,問題出在子組件中。我包含了所有邏輯,以便更好地理解我如何傳遞道具。
查看完整描述

1 回答

?
人到中年有點甜

TA貢獻1895條經(jīng)驗 獲得超7個贊

看看你的codsandbox,我已經(jīng)通過重構(gòu)解決了


基本上,您想要處理父項中選定的項目,并將選擇的項傳遞給您的子項。當您單擊子項時,您可以使用作為 props 傳遞的 handleSelect 函數(shù)來告訴父項您更改了所選索引。


然后在你的孩子中,你只需傳遞一個 bool 作為 props (isSelected) 測試所選索引是否等于 .map 當前實例中項目的索引


所以只有一個孩子會得到這個布爾值的真值。


然后,在您的 navevent 日期中,您可以重構(gòu)有條件添加所選課程的方式。由于您不想傳遞空類,因此您可以使用此運算符&&?;旧希绻?isSelected 為 true ,它將應(yīng)用所選的類,否則它將不會應(yīng)用任何內(nèi)容。


我刪除了第一個條件,因為我不明白你想要做什么,只留下 isSelected 作為參考。


導航主控


import React, { Component } from "react";

//import "./Main.css";

import NavEventDate from "./NavEventDate.js";


export default class NavMain extends Component {

  constructor() {

    super();

    this.state = {

      currentSelectedIndex: null,

      date: [

        {

          day: 0,

          month: 0,

          year: 0,

          dayName: ""

        },

        {

          day: 0,

          month: 0,

          year: 0,

          dayName: ""

        },

        {

          day: 0,

          month: 0,

          year: 0,

          dayName: ""

        },

        {

          day: 0,

          month: 0,

          year: 0,

          dayName: ""

        },

        {

          day: 0,

          month: 0,

          year: 0,

          dayName: ""

        }

      ]

    };

    this.GetOneDayFormat.bind(this);

    this.SetDate.bind(this);

  }


  componentDidMount() {

    let startDate = new Date();

    this.SetDate(startDate);

    console.log(this.state.date);

  }


  SetDate(startDate) {

    let dates = this.state.date;

    for (let i = 0; i < 5; i++) {

      let currentDate = new Date();

      currentDate.setDate(startDate.getDate() + i);

      dates[i].day = String(currentDate.getDate());

      dates[i].month = String(currentDate.getMonth() + 1);

      dates[i].year = String(currentDate.getFullYear());

      dates[i].dayName = String(this.GetOneDayFormat(currentDate));

    }


    this.setState({

      date: dates

    });

  }


  GetOneDayFormat = (today) => {

    let dayNumber = today.getDay();

    let dayName = "";

    switch (dayNumber) {

      case 0:

        dayName = "Sunday".substring(0, 3);

        break;

      case 1:

        dayName = "Monday".substring(0, 3);

        break;

      case 2:

        dayName = "Tuesday".substring(0, 3);

        break;

      case 3:

        dayName = "Wednesday".substring(0, 3);

        break;

      case 4:

        dayName = "Thursday".substring(0, 3);

        break;

      case 5:

        dayName = "Friday".substring(0, 3);

        break;

      case 6:

        dayName = "Saturday".substring(0, 3);

        break;

      default:

        break;

    }

    return dayName;

  };


  handleSelect = (index) => {

    this.setState({ currentSelectedIndex: index });

  };


  render() {

    return (

      <nav id="sectionNav" class="datepicker event">

        <div className="clearfix list-days">

          <h1>Events</h1>

          <ul className="mobile-off">

            {this.state.date.map((data, index) => (

              <NavEventDate

                dayData={data}

                index={index}

                isSelected={this.state.currentSelectedIndex === index}

                handleSelect={this.handleSelect}

              />

            ))}

          </ul>

        </div>

      </nav>

    );

  }

}


導航事件日期


import React, { useState, Component } from "react";

//import "./Main.css";


function NavEventDate({ dayData, handleSelect, index, isSelected }) {

  const dayToday = new Date();


  return (

    <li

      onClick={() => handleSelect(index)}

      className={isSelected && "selected"}

      data-date="20/11/2020"

    >

      <a href="#">

        {dayData.dayName}

        <h1>{dayData.day}</h1>

      </a>

    </li>

  );

}


export default NavEventDate;

如您所見,我僅添加了一個 css 屬性來將所選項目項目符號變成黃色,以便您可以看到結(jié)果。


如果您需要進一步解釋,請告訴我。


查看完整回答
反對 回復(fù) 2023-08-24
  • 1 回答
  • 0 關(guān)注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號