react native的onpress问题

发布于 2022-09-12 22:30:32 字数 851 浏览 27 评论 0

代码如下

export default class app extends Component {
    state={
        name:''
    }
    render(){
        return(
            <View>
                <TextInput onChangeText={this.handle}></TextInput>
                <TouchableOpacity
                     onPress={this.handleSubmit(this.state.name)}>
                     <Text>提交</Text>
                </TouchableOpacity>
            </View>
        )
    }
    handle=(text)=>{
        this.setState({name:text})
    }
    handleSubmit=(name)=>{
        alert(name)
    }
}

问题:这样写的话每次输入文本都会调用handleSubmit函数,这是为什么

<TouchableOpacity
        onPress={()=>this.handleSubmit(this.state.name)}>
        <Text>提交</Text>
</TouchableOpacity>

这样写可以不触发,但是。。。为什么??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一场春暖 2022-09-19 22:30:32

每次setState都会重新执行render函数,由于this.handleSubmit(this.state.name)是函数执行的形式,所以每次setState都会调用这个函数

找回味觉 2022-09-19 22:30:32

onPress 要求是传入一个函数。

onPress={this.handleSubmit(this.state.name)}>

你上述这样写其实是将handleSubmit函数的执行后的返回值undefined赋值给了 onPress。
每次输入都会更改state,触发render,jsx语句重新解释编译运行,每次都会执行上述逻辑;
改成下面的写法就行了:

handleSubmit=(name)=>()=>alert(name)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文