【问题标题】:React native inline arrow function, with parameter. Confusing definition反应本机内联箭头函数,带参数。令人困惑的定义
【发布时间】:2019-10-05 06:46:30
【问题描述】:

我有一系列 react native TouchableHighlights,每个都有一个 key prop(它们是从迭代器生成的)。我想给每一个知道其关键参数的 onPress 函数。

我已经读过基于类的箭头函数通常是最佳实践,所以我尝试了这个:

handlePress = (event) => {
    console.log(event.target.key)
}

<TouchableOpacity key={key} onPress={this.handlePress} />

没有骰子,事件为空。

然后我尝试了:

handlePress = (key) => {
    console.log(key)
}

<TouchableOpacity key={key} onPress={() => this.handlePress(key)} />

这行得通

但是,这也有效:

handlePress(key) {
    console.log(key)
}

<TouchableOpacity key={key} onPress={() => this.handlePress(key)} />

我认为其中一个或另一个会失败。这些功能是否相同,还是我缺少一些微妙之处?

【问题讨论】:

    标签: reactjs react-native arrow-functions


    【解决方案1】:

    javascript中的普通函数和箭头函数基本上有两个区别。

    1. 绑定
    2. 语法

    绑定


    如果你尝试在普通函数中使用this,它会抛出一些错误。 例如。:
    class example {
    
        constructor() {
            super();
        }
    
        someFunc() {
            console.log(this.props);
        }
    
        someFunc();
    
    }
    

    这将失败。

    要修复它,你应该像这样在类的构造函数中手动绑定它:

    class example {
    
        constructor() {
            super();
            this.someFunc = this.someFunc.bind(this);
        }
    
        someFunc() {
            console.log(this.props);
        }
    
        someFunc();
    
    }
    

    另一方面,您不需要绑定箭头函数。默认情况下它将获取上下文。所以,这段代码是完全有效的:

    class example {
    
        constructor() {
            super();
        }
    
        const someFunc = () => {
            console.log(this.props);
        }
    
        someFunc();
    
    }
    

    与您的问题相关:


    如果您还想在任何功能(普通或箭头)中使用event,您可以这样做:

    使用箭头函数:

    handlePress = (event, key) => {
        console.log(event, key)
    }
    
    <TouchableOpacity key={key} onPress={event => this.handlePress(event, key)} />
    

    使用普通函数:

    handlePress(event, key) {
        console.log(event, key)
    }
    
    <TouchableOpacity key={key} onPress={event => this.handlePress(event, key)} />
    

    【讨论】:

    • 嗨,这很有帮助,谢谢,但我正在寻找我的问题中最后两个选项之间的区别(如果有的话),这是最佳做法。
    • 实际上,我查看了一些旧代码,onPress={this.handlePress} 和 handlePress = event => { something with event.target } 似乎确实适用于 React。
    • @Alex 您的问题中有 3 个代码块。如果您不需要任何参数,请尽可能使用第一个代码块。如果你想传递参数,函数,使用第二个代码块,只有在上下文很重要时才使用第三个代码块。
    • @Alex 简而言之,第一个选项是高性能且最好使用的。第二和第三在性能上是相同的,但是尽可能使用箭头函数方法是一个好主意,因为您不必手动绑定它并且会匹配大多数开发人员的代码。
    猜你喜欢
    • 1970-01-01
    • 2020-11-29
    • 2018-08-04
    • 2014-10-17
    • 2019-08-22
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多