victorzadorozhnyy
@victorzadorozhnyy

В чем ошибка в использовании jQuery?

в head посталил такой скрипт
<script>
		$(document).ready(function(){
    			$("#react-dat").mouseover( function(){console.log('im hover')});
		});
	</script>


а вот и сам элемент
<a onClick={ ()=>console.log('HI') } id="react-dat">react-dat</a>


При наведении мышкой не происходит ничего. В чем ошибка?
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
idtimeless
@idtimeless
Front-end Developer
ну потому что все внутри $(document).ready отрабатывается сразу после загрузки,
а так как элемента $("#react-dat") еще нет в дом дереве - то и нет привязки)

вещайте инициализатор после монтирования елемента (componentDidMount)
Lifecycle methods
React components

наверное вот более правильное решение если уж нужно использовать jQuery

export default class Link extends Component {
  constructor(props) {
    super(props);
  }

  componentDidMount() {
    this.onMouseEnterHandler()
  }

  onMouseEnterHandler() {
    $(this.refs.link).mouseover(function(ev){
      console.log(ev.currentTarget.text)
    });
  }

  render() {
    return (
        <a href='' ref='link'>My link</a>
    );
  }
}


или вот более расширенное
export default class Link extends Component {
  constructor(props) {
    super(props);
    this.state = {
      title: 'Login'
    };
  }
  componentDidMount() {
    this.onMouseEnterHandler()
  }
  shouldComponentUpdate(nextProps, nextState) {
    return nextState.title !== this.state.title;
  }

  changeLoginState() {
    this.setState(({title}) => {
      return {title: 'Log out'};
    });
  }

  onMouseEnterHandler() {
    const link = $(this.refs.link)
    link.mouseover((ev) => {
      console.log(ev.currentTarget.text)
    });
    link.on('click', (ev) => {
      ev.preventDefault()
      this.changeLoginState()
    });
  }

  render() {
    const {title} = this.state
    return (
      <a href='' ref='link'>{title}</a>
    );
  }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@springimport
Элемент появляется после назначения события.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы