美文网首页前端React-Native 开发阵营React Native
关于ReactNative 中 this 踩过的坑

关于ReactNative 中 this 踩过的坑

作者: Jeavil_Tang | 来源:发表于2016-07-01 10:48 被阅读4051次

最近项目要求使用reactnative开发,对于我这个新手来说已上手就遇到了许多奇奇怪怪的问题,今天我就来说说遇到的第一个坑遇关于调用函数时绑定this的迷惑,在使用reactnatve的过程中恍恍惚惚感觉到了一些些函数式编程的魅力,一个函数作为另外一个函数的参数来使用。在react中使用函数时,经常需要 bind(this)有时候你搞忘记bind了,吼吼,将会出现一整屏的鲜红伴着一些摸不着头脑的错误,so,一切都显得那么悲伤。好了,下面我来跟大家分享一下我绑定this使用的三种方法吧,推荐大家使用第三种。

先说明一下this到底是什么鬼::“this所指的就是直至包含this指针的上层对象”(如果还不是很理解的话那就google一下吧!)

方法一

constructor(props) 中将所有的定义的方法全部绑定一次 this,就像这样:

constructor(props) {
        super(props);

        this.state = {
            user: undefined,
            data: undefined,
            dataSource: new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 }),
            expanded: false,
            order: 1,
            page: 1,
            isFollowing: false,
        };
        this.sortBtnPressed = this.sortBtnPressed.bind(this);
        this.becomeCreatorBtnPressed = this.becomeCreatorBtnPressed.bind(this);
        this.nextPage = this.nextPage.bind(this);
        this.sortOptionPressed = this.sortOptionPressed.bind(this);
        this.followBtnPressed = this.followBtnPressed.bind(this);
    }

显得格外麻烦和臃肿有木有😂,当然你也可以写一个方法为所有的函数去循环绑定this

方法二

在需要调用方法的时候绑定 this,比如:

  <TableView  data = {this.state.data}
                            dataSource = {this.state.dataSource}
                            requestData = {this.requestData}
                            didSelectMsg = {this.didSelectMsg.bind(this)}
  />

这种做法也不是很推荐,到处都在绑定 this 看起来不是很舒服

方法三

采用ES6 箭头函数的写法,既方便又整洁

requestData = () => {
        const nextIndex = this.state.pageIndex + 1;
        this.setState({
            pageIndex: nextIndex,
        });
        NativeModules.LivePlayerListModule.requestLivePlayerList(
            nextIndex,
            (data) => {
                this.updateDataSource(data);
            }
        );
    }

箭头函数没有它自己的this值,箭头函数内的this值继承自外围作用域。因此我们在调用函数的时候完全可以放心大胆的去调用,不用再操心这个this要从那里获取,它指代的又是谁

有写问题我还没有弄得太明白,因此本文会不定期更新
如果在阅读过程中遇到什么错误欢迎指正😄

相关文章

网友评论

  • aqnaruto:第三种方法并不是优化的方法 因为()=> 每次都会产生新的函数,造成了不必要的开销。
  • 栈溢出: <TouchableOpacity onPress={ ()=>this.pushToDetail() }>
    在这种里面的该怎么改,怎么传this
    <TouchableOpacity onPress={ function () {
    this.pushToDetail()
    }}>

  • 亚希路北:咯摸摸
  • 子慕大诗人:哟 没新文章了
    Jeavil_Tang:@子慕大诗人 最近太忙了,赶进度:joy:忙过这阵就上新:smile:
  • 冰_心:同样在学习,js中this一直是个让人头疼的事,~~
    Jeavil_Tang:@冰_心 就是,刚开始写的时候晕晕乎乎的,慢慢学习练习一下就好了。共勉哈😄
  • Lazy1:只有Es6写法的时候需要bind
    Jeavil_Tang:@lazy1 是的,如果采用React.createClass 方法可以自动绑定this,es6的写法需要手动去绑定
  • 子慕大诗人:哟哟哟
    Jeavil_Tang:@子慕大诗人 别起哄
  • 铝小亮:活捉程序媛一枚,哈哈哈哈哈~~~

本文标题: 关于ReactNative 中 this 踩过的坑

本文链接:https://www.haomeiwen.com/subject/uevfjttx.html