Изменить цвет, когда onClick() с React

У меня вот такие пуговицы любви на картинках: Изменить цвет, когда onClick() с React

Проблема в том, что когда я нажимаю только на один плейлист, чтобы все понравились, он становится красным, что, очевидно, не то, что мне нужно. Это то, что я получаю сейчас: Изменить цвет, когда onClick() с React

Я фильтрую с помощью idMedia, это функция changeColor:

  onChangeColor = (e) => {

        this.props.addFavorisAction(e.target.id)
        this.setState({
            backgroundColor: !this.state.backgroundColor
        })
  }

а это возврат. Любая помощь будет оценена по достоинству.

const Hit = ({ hit, onToggleList, onChangeColor, displayAudioPlayer, onToggleMP3Read, backgroundColor }) => {
    return (
    <div className = "cm-recherche-item-container">
        <div className = "cm-recherche-item-block1">
            <div className = "cm-recherche-item-avatar-container">
                <img
                    className = "cm-recherche-item-avatar"
                    alt = ""
                    src = {hit.comedienPhoto}
                />
            </div>
            <div className = "cm-recherche-item-title-container">
                <div className = "cm-recherche-item-name">
                    {hit.comedienNomComplet}
                </div>
                <div className = "cm-recherche-item-title">
                    {hit.mediaIntitule.length > 60 ? (
                        hit.mediaIntitule.substr(0, 60) + '...'
                    ) : (
                            hit.mediaIntitule
                        )}
                </div>
            </div>
            <div className = "cm-recherche-item-actions-container">
                <div className = "cm-recherche-item-actions">
                    <div className = "cm-recherche-item-action">
                        <i className = "icon icon-forward-o"></i>
                    </div>
                    <div className = "cm-recherche-item-action">
                        <i id = {hit.idMedia} onClick = {onChangeColor} className = {`icon icon-like-o ${backgroundColor ? "gx-text-gris" : "gx-text-red"}`} ></i>
                    </div>
                    <div className = "cm-recherche-item-action">
                        <i id = {hit.idComedien} onClick = {onToggleList} className = "icon icon-chevron-right"></i>
                    </div>
                </div>
            </div>
        </div>

        <div className = "cm-recherche-item-block2">
            <div className = "cm-recherche-item-emojis">
                {hit.interpretationsIcons.map((value, index) => {
                    return (
                        <div className = "cm-recherche-item-icon">
                            <div>
                                <Tooltip title = {hit.interpretationsLabels[index]}>
                                    {String.fromCodePoint(value)}
                                </Tooltip>
                            </div>
                        </div>
                    )
                })} 
                {hit.langueIcon !== "" && hit.langueIcon != null &&
                    <Tooltip title = {hit.langueLabel}>
                        <div className = "cm-recherche-item-icon">
                            <i class = {`flag flag-24 gx-mr-2 ${hit.langueIcon} cm-recherce-lang-icon`}></i>
                        </div>
                    </Tooltip>
                }
                {hit.typeIcon !== "" && hit.typeIcon != null &&
                    <div className = "cm-recherche-item-icon">
                        <div>
                            <Tooltip title = {hit.typeLabel}>
                                {String.fromCodePoint(hit.typeIcon)}
                            </Tooltip>
                        </div>
                    </div>
                }
            </div>
            <div className = "cm-recherche-item-tags">

                <div style = {tagStyle}>
                    <i className = "icon icon-tag cm-recherche-icon-tag"></i>
                </div>

                {hit.interpretationsLabels.map((value, index) => {
                    return (
                        <div style = {tagStyle}>
                            <div class = "cm-recherche-tag">{value}</div>
                        </div>
                    )
                })}
            </div>
        </div>
        <div className = "cm-recherche-item-first" style = {{ display: "none" }}>
            <div className = "cm-recherche-item-infos-container">
                <div className = "cm-recherche-item-emojis-container"> 
                </div>  
            </div>   
        </div>   
        <div className = "cm-recherche-item-second"> 
        </div>
    </div>
)
}
Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
8 615
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

onChangeColor и backgroundColor определены в родительском компоненте, этот компонент одинаков для всех экземпляров компонента Hit, и поэтому backgroundColor изменяется для всех из них при переключении.

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

вам нужно будет немного изменить состояние backgroundColor, чтобы добиться этого, примерно так:

 onChangeColor = (e) => {

    const id = e.target.id;
    this.props.addFavorisAction(id)
    const newLikeState = !this.state.backgroundColor[id]
    const newBackgroundColorList = {...this.state.backgroundColor, [id]: newLikeState }

    this.setState({
            backgroundColor: newBackgroundColorList 
        })
  }


<i 
  id = {hit.idMedia} 
  onClick = {onChangeColor} 
  className = {`icon icon-like-o ${backgroundColor[hit.idMedia] ?  "gx-text-red" : "gx-text-gris"  }`} 
  >
</i>

да, хорошо, теперь это работает, но проблема в том, что теперь, когда я нажимаю на ту же кнопку, чтобы не любить, ничего не происходит. Вы знаете, как это сделать?

Ahmed 08.07.2019 15:09

@Ahmed отредактировал мой ответ, попробуйте и дайте мне знать, как это происходит

Roy.B 08.07.2019 15:24

Мне было интересно, когда обновляя, я хочу, чтобы уже сделанные лайки были видны. у вас есть идеи, что я могу сделать для этого? Спасибо.

Ahmed 09.07.2019 12:38

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