React Component State не работает

Я пытался реализовать эффект наведения на элемент div, как в этом коде: https://codesandbox.io/s/XopkqJ5oV

Компонент, в котором я хочу это сделать, представляет собой компонент многократного использования, который используется несколько раз на одной странице. Полагаю, это причина, по которой я не могу заставить его работать. Что мне не хватает?

Даже использование приведенного выше кода не будет работать в моем приложении.


РЕДАКТИРОВАТЬ: Спасибо за ответы. Я нашел проблему:

Я не давал знать ShouldComponentUpdate, он должен учитывать state.isHovering.

 shouldComponentUpdate(nextProps, nextState) {
    return (
      nextProps.post.id !== this.props.post.id ||
      nextProps.screenshotClickUrl !== this.props.screenshotClickUrl ||
      nextProps.onImageClick !== this.props.onImageClick ||
      nextProps.handleMouseHover !== this.props.handleMouseHover ||
      nextState.isHovering !== this.state.isHovering
    )
  }

это ваш код в CodeSandbox? Если это так, он уже работает. Если нет, то где твой код? Вы пробовали console.info в функции привязки событий и смотрели, запускаются ли события? Я обновил метод рендеринга, чтобы повторно использовать тот же компонент, и он работает, что, вероятно, имитирует то, о чем вы просите. render(<div><HoverExample /><br/><HoverExample /></div>, document.getElementById('root'));

Rikin 18.05.2018 17:10

обновленная песочница для вас - codeandbox.io/s/qq47zm53vq

Zoltan Toth 18.05.2018 17:14

@Rikin pastebin.com/Tb54MV9f Вот и все. Это мой код!

mowtheone 18.05.2018 17:19

Можете ли вы сделать рабочий пример в stackblitz, который воспроизводит вашу проблему. Вы пробовали console.info в handleMouseHover и смотрели, запускается ли он при наведении курсора на нужный элемент?

Rikin 18.05.2018 17:24

Поскольку @ZoltanToth имеет в своем коде ссылку, просто используйте ее таким же образом вместо написания логики наведения в компоненте ImagePost. Пусть ImagePost обрабатывает сообщения Post, а HoverComponent обрабатывает данные, связанные с наведением курсора. Разделение озабоченности.

Rikin 18.05.2018 17:26

Вопросы должны стоять сами по себе; нам не нужно заходить на внешние сайты, чтобы понять и / или ответить на вопрос.

Dave Newton 18.05.2018 17:51
Поведение ключевого слова "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) для оценки ваших знаний,...
0
6
63
1

Ответы 1

Вам не хватает this в:

  toggleHoverState(state) {
    return {
      isHovering: !state.isHovering // Need a "this" to access state.
    };
  }

Если вы сложите элементы слишком близко друг к другу, это будет мешать событиям входа / выхода мыши, например, если вы разнесете их:

const Foo = () => {
  return (
    <div>
      <HoverExample />
      <div style = {{height: '2em', border: '1px solid blue'}} />
      <HoverExample />
    </div>
  )
}

это работает, как (я думаю) вы ожидаете.

https://codesandbox.io/s/93l25m453o

Я обводил его рамками, чтобы визуализировать проблему.

Если это не имеет смысла, посмотрите, что произойдет, если у вас будет индикатор наведения в соседнем диапазоне, а не в стеке:

https://codesandbox.io/s/5k5jj3rpok

Однако @mowtheone shouldComponentUpdate не имеет отношения к вашему исходному коду. Если это относится к было, то образец кода должен лучше отражать реальную проблему.

Dave Newton 18.05.2018 18:39

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