簡體   English   中英

為什么 React 事件處理程序在接收 arguments 時表現不同?

[英]Why do React event handlers behave differently when receiving arguments?

使用以下代碼,每次單擊按鈕時,都會按預期將“我被單擊”輸出到控制台。

function handleClick() {
    console.log("I was clicked")
}

function App() {
    return (
        <div>
            <img src="https://www.fillmurray.com/200/100"/>
            <br />
            <br />
            <button onClick={handleClick}>Click me</button>
        </div>
    )
}

但是,如果我更改 handleClick 以獲取參數,則 output 會在頁面加載時顯示,並且任何額外的點擊都不會產生額外的 output。


function handleClick(test) {
    console.log(test + "I was clicked")
}

function App() {
    return (
        <div>
            <img src="https://www.fillmurray.com/200/100"/>
            <br />
            <br />
            <button onClick={handleClick("hello: ")}>Click me</button>
        </div>
    )
}

為什么在這里包含參數的簡單行為會改變行為? 我懷疑它與事件處理程序沒有在第二種情況下傳遞事件 object ,而在第一種情況下自動傳遞,但我不確定事件 object 的哪些屬性會導致這種行為。

如果在 function 之后使用 (); 這意味着 function 執行。 要使用此語法分配值,您可以輕松地使用

onPress={handleClick.bind(this, ...args)}

使用這種語法,我們將當前 scope 的 this 綁定到 function 並且我們在分配參數時沒有執行它。 分配參數和立即調用 function 的方式是

handleClick.call(this, ...args)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM