[英]How to use onClick event on Link: ReactJS?
在React Router中,我必須具有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});
}
當我給出超時內部調用函數click時,它導航到新頁面,並在一段時間后狀態得到更新,導致顯示以前的名稱,直到狀態被新名稱更新為止。
只有在執行onClick函數中的代碼后,才可以導航到新路線。
您可以在此處獲得完整的代碼。( https://github.com/pushkalb123/basic-react-router/blob/master/src/App.js )
一種可能的方法是,不使用Link
,而是使用history.push
動態更改路由。 為此,請刪除Link
組件並在li
上定義onClick
事件。 現在,首先執行onClick
函數中的所有任務,最后使用history.push
更改要在其他頁面上導航的路線。
在您的情況下,請更改setState
回調函數內部的路由器,以確保僅在狀態更改后才會發生。
像這樣寫:
<li key={i} onClick={() => props.selectName(name)}> {name} </li>
selectName = (name) => {
this.setState({ selectedName:name }, () => {
this.props.history.push('about');
});
}
查看以下答案:
另外,我建議使用URL參數來捕獲“關於”頁面所涉及的人員的姓名。 因此,不是url是/ about,而是名稱在幕后,而是/ about / tom或/ about / pushkal。 為此,您需要在index.js中定義URL路由器中的參數:
<Route path="/about/:name" component={AboutPage}>
現在,當您鏈接到“關於”頁面時,您將像這樣進行操作:
<Link to={"/about/" + name}>{name}</Link>
現在,在AboutPage組件,您可以訪問的名稱PARAM作為道具this.props.params.name
。 您可以在此處查看更多示例。
該方法與您當前的方法有些不同,但是我懷疑它將在以后使設計更容易
只需將Link的內容包裝在div內,並將onClick偵聽器分配給該div,即可正常工作。 例如:
<Link to="/about">
<div onClick={() => {yourfunction()}>About</div>
</Link>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.