Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.01.2020, 21:36
Новичок на форуме
Отправить личное сообщение для Vlad Kopernikov Посмотреть профиль Найти все сообщения от Vlad Kopernikov
 
Регистрация: 09.01.2020
Сообщений: 2

Почему не отрабатывает onMouseOver?
Задача: вывести при наведении всех пользователей, которые родились в этом месяце. Переменная меняет значение в функции onHover, которая вызывается методом onMouseOver Пробовал и без использования .bind, ошибка не перестает преследовать:
TypeError: Cannot read property 'onHover' of undefined
Как пофиксить функцию onHover? Заранее спасибо!

https://jsfiddle.net/kw12ab94/
Ответить с цитированием
  #2 (permalink)  
Старый 09.01.2020, 23:50
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Vlad Kopernikov
TypeError: Cannot read property 'onHover' of undefined
У вас функция объявлена как — onHover, но вы её почему-то пытаетесь вызвать как this.onHover.

В самой функции вы пытаетесь изменить значение константы usersVisible! (Тогда уж следовало объявить
const [usersVisible, setUsersVisible] = React.useState(false);
и использовать
onMouseOver={() => setUsersVisible(true)}
onMouseOut={() => setUsersVisible(false)}
) Но такой скрипт работает только с мышкой и к тому же показывает при наведении мышкой всех пользователей всех месяцев!

Я рекомендую вам не использовать usersVisible. Вместо этого используйте возможности CSS. Т. е. вам тогда следует удалить onMouseOver, onHover, заменить
{n.users.map(
								user =>
									usersVisible ? (
										<div key={user.id}>
											<div>
												<h4 className={classes.userId}>user #{user.id}</h4>
												данные пользователя...
											</div>
										</div>
									) : null
							)}
на
{n.users.map(user => <div key={user.id}>
    <div>
        <h4 className={classes.userId}>user #{user.id}</h4>
        данные пользователя...
    </div>
</div>)}
и объявить CSS (оберните пользователей в <section>)
#months h2 + section {
	display: none;
}
#months:hover h2 + section {
	display: block;
}



Кстати! Объявите начальное состояние так...
const [users, setUser] = React.useState([]);
и вам не придётся писать так...
users &&
		users.reduce(

Вот исправленный пример со всем тем, о чём я говорил... https://codepen.io/Malleys/pen/YzPaOjy?editors=0010
Ответить с цитированием
  #3 (permalink)  
Старый 10.01.2020, 00:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Malleys,
почему n.users, а не n.users.length?
className={
							n.users > 0
								? classes.month.grey
								: n.users > 2 ? classes.blue : n.users > 6 ? classes.green : classes.red
						}
Ответить с цитированием
  #4 (permalink)  
Старый 10.01.2020, 00:57
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
почему n.users, а не n.users.length?
Очевидно, что Vlad Kopernikov не умеет работать с длиной массивов (исправил!), а я больше сосредоточился на onHover (из которого следовало, что автор не понимает смысл константы и состояния компонента в React!)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не отрабатывает замена одного элемента другим ? Black_Star Общие вопросы Javascript 5 11.02.2018 19:15
Почему некоторые операторы возвращают значения, а не ссылки? dump Общие вопросы Javascript 15 25.07.2012 17:28
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
FireFox: onmouseover не работает при зажатой кнопке мыши no. Общие вопросы Javascript 4 19.08.2008 13:43
Не отрабатывает событие onmouseout при внедрении нового слоя ilshat Элементы интерфейса 3 28.07.2008 06:27