如果我在下面寫 onPress,當我點擊按鈕時,控制臺會寫 test. 但是如果我寫 onPress(),它會在頁面呈現時在控制臺上寫一個測驗。寫 onPress() 和 iife 有關系嗎?這就是為什么它在頁面呈現的那一刻不被呼叫就可以作業的原因嗎?
import React from 'react';
import { Button } from 'react-native';
const Screen = () => {
const onPress = () =>{
console.log('test')
}
return (
<Button title='button' onPress={onPress()}/>
)
};
export default Screen;
uj5u.com熱心網友回復:
不,onPress={onPress()}不是立即呼叫的函式運算式 (IIFE)。1它是函式呼叫:您正在呼叫onPress并將其回傳值用作onPress道具的值。因此,您在渲染組件時會看到控制臺訊息,因為該函式呼叫發生在渲染期間,而在按下按鈕時您看不到它,因為按鈕上沒有press處理程式(因為onPress沒有回傳)。
要onPress在按下按鈕時呼叫,請使用onPress={onPress}(()之后沒有):
return (
<Button title='button' onPress={onPress}/>
);
這會將您的onPress功能分配給onPress道具,告訴按鈕在按下按鈕時呼叫它。
1 IIFE是您同時創建和呼叫函式的地方,如下所示:
(() => console.log("Hi"))();
該() => console.log("Hi")部分創建功能,以及(...)()部分呼叫它。
uj5u.com熱心網友回復:
在 JS 中,當你想創建一個箭頭函式時,它應該總是被指出,所以現在例如
return (
<Button title='button' onPress={onPress()}/>
)
將自動執行,因為它是assignmentOperation,因此您可以使用
return (
<Button title='button' onPress={() => onPress()}/>
)
uj5u.com熱心網友回復:
onPress處理程式需要一個將it will在press事件上執行的函式。
因為在第一種情況下,您傳遞了函式物件而不執行它,所以它作業正常。
但在第二種情況下,由于您自己執行,onPress 預計它將從您的onPress事件輸出中接收函式。
您可以在下面更改它,它將起作用
<Button title='button' onPress={() => onPress()}/>
或者
<Button title='button' onPress={onPress()}/>
const onPress = () => {
return () => console.log('test');
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/406774.html
標籤:
下一篇:Firestore地圖陣列未更新
