[英]Odd Behavior With JavaScript OnClick Event
我有一個包含以下代碼的 React 應用程序:
<div className={ mainCss } data-appmode={ AppMode.MAIN } onClick={ this.handleAppModeClick.bind(this) }>
<div className="NavLinkIconContainer"></div>
<div>Main</div>
</div>
當我單擊帶有className="NavLinkIconContainer"
的 div 時, handleAppModeClick
function 無法正常工作。 function 觸發但不獲取 data-* 屬性。 但是,當我單擊帶有 Main 的 div 作為它的內容時,它可以完美地拾取 data-* 屬性。 為什么會這樣,我該如何解決?
您可以從event.currentTarget.dataset
獲取data-appmode
值。
class Demo extends React.Component { handleAppModeClick = event => console.log(event.currentTarget.dataset.appmode); render() { return ( <div data-appmode="example" onClick={this.handleAppModeClick}> <div className="NavLinkIconContainer">NavLinkIconContainer</div> <div>Main</div> </div> ) } } ReactDOM.render( <Demo />, root )
<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="root"></div>
Ori Drori 的建議會奏效。 或者,您可以將組件編寫為
<div className={ mainCss } data-appmode={ AppMode.MAIN } onClick={ ()=>this.handleAppModeClick(AppMode.MAIN) }>
<div className="NavLinkIconContainer"></div>
<div>Main</div>
這將使用硬編碼參數觸發 function。 在我看來,它比使用 event.currentTarget.dataset 要干凈一些。 話雖如此,我確信其他人不同意我的觀點,如果解決方案有效,它就會有效。
或者,您可以使用
handleAppModeClick = event => console.log(event.target.getAttribute('data-appmode'));
從實際元素中獲取數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.