React Как запустить onClick каждый из функции карты

У меня есть несколько сопоставленных списков, и я хотел бы запустить onClick, когда я щелкаю элемент (который является одним из объектов массива).

Допустим, есть 3 списка, и когда я нажимаю один из них, я хочу изменить класс «элемент, который я щелкнул» на «открыть» с «закрыть».

state= {
    open: false
}

handleClick = () => {
    this.setState({
        open: !this.state.open
    })
}

Array.map((list, index) => {
    <div key = {index} onClick = {this.handleClick}>
        <p className = {this.state.open? 'open' : 'close'}>{list.title}</p>
    </div>
})

.

Array = [{
    title: 'a',
    link: '/service/wallet'
},{
    title: 'b',
    link: '/service/home'
}]

У меня есть значение this.props.location.pathname, и я думаю, что могу сравнить его с Array[i].link.

что-то вроде этого?

if (this.props.location.pathname === Array[0].link){

}

Однако я не знаю, как заполнить код для этой проблемы. Подскажите пожалуйста, верна ли моя идея и несколько подсказок.

onClick = {() => this.handleClick(list)} - передавайте все, что хотите, в handleClick
vsync 12.11.2018 13:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
690
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вам нужно будет оставить "нажата ли кнопка?" информация в this.state. Поскольку это список вещей, которые вам нужно отслеживать, вы не можете сохранить состояние в одной переменной, вам понадобится их карта.

state= {
    open: {}
}

handleClick = (link) => {
    let linkOpenState = false;
    if (this.state.open.hasOwnProperty(link)) {
        linkOpenState = this.state.open[link];
    }

    this.setState({ open: { [link]: linkOpenState } })
}

Array.map((list, index) => {
    <div key = {index} onClick = {this.handleClick.bind(this, list.link)}>
        <p className = {this.state.open[list.link]? 'open' : 'close'}>{list.title}</p>
    </div>
})

Вам нужно привыкнуть думать «в стиле React». Состояние необходимо поддерживать в состоянии компонента (или, если сложность становится проблемой, посмотрите на Redux). Вы не повелительно манипулируете DOM и не «запрашиваете» у DOM информацию, вы рассказать это то, как он должен выглядеть в зависимости от состояния.

Пожалуйста, взгляните на этот код отображение данных с элементами реакции

Чтобы решить эту проблему, у вас может быть состояние, которое отслеживает взаимодействие для группы элементов, в вашем случае это список элементов. здесь вы можете использовать карту в переменной состояния и иметь пару {ключ, значение}, связанную с каждым элементом, чтобы отслеживать его. Надеюсь это поможет. Спасибо.

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