Как использовать событие onClick по ссылке: ReactJS?

в маршрутизаторе React у меня есть to и onClick атрибуты, как показано ниже

<li key={i}><Link to="/about" onClick={() => props.selectName(name)}>{name}</Link></li>

state = {
    selectedName: ''
};

selectName = (name) => {
   setTimeout(function(){this.setState({selectedName:name});}.bind(this),1000);
   // this.setState({selectedName: name});
}
  • to атрибут переходит к о маршрут
  • onClick присваивает значение переменной состояния selectedName, которая будет отображаться при переходе на страницу About.

когда я даю тайм-аут insided функция называется при щелчке его переход на новую страницу и через некоторое время состояние обновляется, что приводит к отображению предыдущего имени, пока состояние не будет обновлено новым именем.

есть ли способ, которым он будет перемещаться по новому маршруту только после выполнения кода в функции onClick.

вы можете получить весь код [here].(https://github.com/pushkalb123/basic-react-router/blob/master/src/App.js)

3 ответов


один из возможных способов-вместо использования Link используйте history.push для динамического изменения маршрута. Для достижения этого удалите Link компонент и определения onClick событие on li. Теперь сначала выполните все задачи внутри


кроме того, я бы рекомендовал использовать параметры URL, чтобы захватить имя человека, о котором идет речь. Таким образом, вместо url-адреса /about и имени, находящегося за кулисами, это будет /about/tom или /about/pushkal. Способ сделать это-определить параметры в маршрутизаторе URL как таковые в вашем индексе.js:

<Route path="/about/:name" component={AboutPage}>

Теперь, когда вы ссылаетесь на страницу about, вы сделаете это как таковое:

<Link to={"/about/" + name}>{name}</Link>

Теперь, в вашем компоненте AboutPage, вы может получить доступ к имени param в качестве опоры в this.props.params.name. Вы можете посмотреть больше примеров здесь.

этот метод немного отличается от вашего текущего подхода, но я подозреваю, что это приведет к более легкому дизайну позже


просто оберните содержимое ссылки внутри div и дайте слушателю onClick этот div, и он будет работать нормально. е.г:

<Link to="/about">
 <div onClick={() => {yourfunction()}>About</div>
</Link>