React Native中onPress={onPress()}写法与IIFE是否存在关联?
关于React Native按钮onPress两种写法的区别与IIFE的关联问题
咱们先把这俩写法的核心差异掰扯清楚,再聊和IIFE的关系:
1. 两种onPress写法的本质区别
- 当你写
onPress={onPress}时,你给Button的onPress属性传递的是函数的引用。React Native会在按钮被点击的瞬间,调用这个引用指向的函数,这也是官方推荐的正确写法。 - 但你写
onPress={onPress()}时,情况完全不一样:这里的onPress()是立即执行函数调用——在组件渲染到这一行代码的时候,JavaScript引擎会直接执行这个函数,然后把函数的返回值(你的例子里onPress函数没有return,所以返回undefined)传给Button的onPress属性。这就是为什么页面一渲染就打印'test',而且点击按钮反而没反应的原因,因为Button拿到的不是可执行的函数,而是undefined。
2. 和立即执行函数表达式(IIFE)的关联
你猜的没错,这种onPress()的写法确实和IIFE的核心逻辑一致——在当前代码执行阶段立即触发函数执行,而不是等待某个事件(比如点击)触发。不过严格来说,IIFE通常指的是匿名函数的自执行,比如:
(function() { console.log('test') })()
但你的onPress()是调用一个已经定义好的命名函数,本质都是“在代码走到这一步时立刻执行函数”,所以你说的因果关系是对的:正是因为它是立即执行的函数调用,才会在页面渲染阶段就被执行,而非点击时触发。
3. 补充:如果需要给函数传参数怎么办?
如果你的onPress需要接收参数,不能直接写onPress={onPress(参数)}(不然还是会立即执行),正确的做法是用箭头函数包裹,把它变成一个待执行的函数引用:
<Button title='button' onPress={() => onPress(你的参数)}/>
这样只有当按钮被点击时,箭头函数才会执行,进而调用你的onPress函数并传递参数。
内容的提问来源于stack exchange,提问作者SoF
相关产品推荐
相关产品推荐

