React Native onPress绑定带括号函数后随TextInput输入自动触发问题求解
问题原因解析
- 首先明确React事件绑定的要求:
onPress等事件属性要求接收的是函数引用,也就是你需要把函数本身传给这个属性,React会在事件触发(比如用户点击按钮)时主动调用这个函数。 - 你写
onPress={myFunction()}的问题:加了括号后代码会在组件渲染阶段立刻执行myFunction,再把函数的返回值(你的myFunction没有return语句,返回值是undefined)传给onPress,完全达不到点击触发的效果。 - 为什么修改TextInput会触发函数执行:你在TextInput的
onChangeText里修改了text这个state,React组件的state更新时会触发组件重新渲染,每次重新渲染都会执行JSX里的所有表达式,自然每次都会执行一次myFunction(),所以你每次输入文本都会看到log输出。
正确的传参写法
如果你需要给myFunction传参数,不要直接加括号调用,要包裹一层匿名函数:
<Button title="Button" onPress={() => myFunction(你要传的参数)} />
这种写法是把匿名函数的引用传给onPress,只有点击按钮时才会执行这个匿名函数,再调用带参数的myFunction,渲染阶段不会触发执行。
内容的提问来源于stack exchange,提问作者user17026550
相关产品推荐
相关产品推荐

