Как выполнить onclick перед переходом на другую страницу?

#javascript #reactjs #onclick

#javascript #reactjs #onclick

Вопрос:

Я работаю в React, и у меня следующий сценарий.

   <a href={link} variant="primary" onClick={this.onClickDoSomething}>
                          here.
  </a>
  

Теперь я хочу, чтобы onclick выполнялся до того, как была нажата ссылка. Однако я не вижу, чтобы это происходило.

Как обойти эту проблему? Спасибо.

Комментарии:

1. удалите ссылку из href и сначала обработайте событие onclick, после чего перенаправьте страницу на указанную ссылку

2. onclick должен сработать, я думаю, это скорее проблема с тем, что делает onclick.

3. У меня почти идентичный код, и у меня все работает нормально …. onClick запускается, и после этого браузер автоматически переходит к URL-адресу ссылки.

Ответ №1:

Обратите внимание, что onclick() сработает перед перенаправлением страницы. Похоже, что вы можете захотеть обрабатывать навигацию в своей onclick функции, а не иметь href атрибут. Делая это таким образом, вы можете условно перенаправить (при необходимости) и / или дождаться завершения некоторого асинхронного кода.

 onClick = url => {
  alert('Do something');
  window.location.href = url;
}  
 <a href='#' onclick="onClick('https://stackoverflow.com')">here.</a>  

Фрагмент реакции:

 class App extends React.Component {
  onClickDoSomething = link => ev => {
    alert(link);
    // Do any operations here
    window.location.href = link;
  }
  render() {
    const link = 'https://stackoverflow.com';
    return <div>
      <a href='#' onClick={this.onClickDoSomething(link)}>here.</a> 
    </div>;
  }
}

ReactDOM.render( <App/> , document.querySelector("#app"))  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id='app'></div>  

Комментарии:

1. Спасибо, но здесь не «появляется» интерактивность для использования?

2. вы могли бы добавить атрибут href='#' , чтобы получить стиль, если хотите

3. Обновил мой ответ, также предоставил вам пример реакции

Ответ №2:

Сначала будет предложено использовать react router, но если ссылка внешняя, тогда другой способ — сохранить href=»#» и написать функцию onclickHandler в конце onclickHandler просто использовать window.местоположение=[ссылка]

вы хотите посетить

Надеюсь, это поможет

Ответ №3:

ваш обработчик кликов должен быть таким

 onClickDoSomething=(link)=>{
//do something,then redirect to given link
window.location.href=link

}
  

и вы должны отображать ссылку как

 <a  variant="primary" onClick={()=>{this.onClickDoSomething(link)}}>
                      here.
</a>
  

Комментарии:

1. Работает ли по-прежнему поведение браузера cmd click или ctrl click по умолчанию при использовании этого решения?

2. да, это будет работать с cmd click и ctrl click, но поскольку ссылка href не установлена, при использовании ctrl click откроется пустое окно

3. Спасибо за ответ, если я помещу ссылку в href привязки, она будет работать нормально, и мне не нужно открывать окно вручную. Расположение. ссылка на навигацию. Он запускает JS, а затем автоматически переходит. (протестировано в Chrome, FF и safari)

4. никогда не проверял подобным образом, спасибо, что поделился информацией, но OP уже сделал это, и он говорит, что это не работает, если вы видите код в вопросе, который он дал href и click handler для привязки тега.

Ответ №4:

Все приведенные ответы (т. Е. использование # для href, а затем добавление окна.расположение к вашему обработчику кликов) должно работать идеально.

Однако, если вы ищете другое решение, вы также можете попробовать сделать ссылку кнопкой вместо тега привязки и просто оформить ее как кнопку. Ниже я сделал это с помощью Bootstrap, но вы могли бы сделать это и с помощью простого CSS:

 handleClickExamQuestions =  function(URL){               
   window.location=URL       
 }  
  <button class="btn btn-link" onClick = {()=>this.handleClick(URL)}>Click Me</button>