OnClick Открыть все выпадающее меню в строках таблицы

наличие n выпадающих меню в React JS. Когда я нажимаю n-й пункт меню, я хочу открыть соответствующее выпадающее меню. Но то, что я получаю сейчас, это то, что при нажатии на пункт меню открываются все раскрывающиеся списки. Как этого можно достичь?

Код:-

    const [isActive, SetisActive] = useState(false);                           
           {
              PlaylistData && PlaylistData.map((playdata) => {
                                return (
    
      <td >
    
                    <div className = "Dropdown">
                <div className = "Dropdown_btn" onClick = {(e) => SetisActive(!isActive)}>{playdata.ChannelName}</div>
                    {isActive && (
                           Channelname.map((val, id) => {
                                                        {
               return (
                       <Fragment key = {id}>
                       {removeRedundant([...val, playdata.ChannelName]).map((val1) => {
                           return (                                                                     
                                    <div className = "dropdown_content">                                                                                
   <div className = "dropdown_item"                                                                              
          onClick = {(e) => { setPlayer(val1, playdata.idx, StoreIdx) }}>{val1}</div>
                                                                            </div>
                                                                        )
                                                                    })}
                                                                </Fragment>
                                                            )
                                                        }
                                                    })
                                                )}
                                            </div>
                                        </td> 
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо того, чтобы устанавливать значения true/false для вашего isActive, вы должны установить идентификатор меню, которое вы хотите открыть.

Я изменил название вашего состояния с isActive на activeMenu, чтобы оно соответствовало присвоенному значению.

const [activeMenu, setActiveMenu] = useState(); //as no opening menu initially   

Измените свой onClick (я не знаю, у вашего playdata есть уникальный идентификатор или нет, поэтому я использую ChannelName. Если ваши данные имеют id, вы должны использовать его вместо этого)

onClick = {(e) => setActiveMenu(playdata.ChannelName)}

Последняя часть, которую вам нужно сделать, это просто сравнить свое состояние с текущим пунктом меню в списке.

{activeMenu === playdata.ChannelName && (Channelname.map((val, id) => <elements></elements>)

спасибо, это работает, пожалуйста, скажите мне, что он работает в соответствии с идентификатором строки таблицы (открыть), но когда я нажимаю его снова 2 раза, он не закрывается в 1 строке, но когда я нажимаю на 2 строки, раскрывающийся список 1 строки закрывается.

ANITA KUMARI 22.03.2022 17:31

Если вы хотите сделать это поведение, вам нужно изменить onClick вот так onClick = {(e) => activeMenu === playdata.ChannelName ? setActiveMenu(null) : setActiveMenu(playdata.ChannelName)}. Если ваше активное меню совпадает с состоянием, вы устанавливаете значение null, чтобы свернуть меню @ANITAKUMARI

Nick Vu 22.03.2022 17:33

Другие вопросы по теме