React-Native Listview 的各个属性解释?

今天终于成功使用 React Native 打包 APK 成功,

IOS 暂时没有 开发者账号 所以先弄 Android.
组件第一个遇到的就是 ListView, 实在有些看不太明白加之人懒,
所以前来请教经验

在很多ListView的例子中都有这样一个属性rowHasChanged
按理说他应该是布尔值 (在后面可以看到它却显示为s1)
以下是我做的测试代码
如下

class Yes extends Component {

  constructor(){
    super();
    var ds = new ListView.DataSource({
      rowHasChanged: (r1, r2) => r1 !== r2
    });
    this.state = {
      dataSource: ds.cloneWithRows(['row 1', 'row 2']),
    }
  }

  componentDidMount(){
    var that = this;

    setTimeout(()=>{
      that.setState({
        dataSource: this.state.dataSource.cloneWithRows(['row 1', 'row 2','row 3'])
      });
    },1000);
  }

  render() {
    return (
    <ListView
      dataSource={this.state.dataSource}
      renderRow={(rowData,rowHasChanged) => <Text>{rowData +':'+ rowHasChanged}</Text>}
    />
    );
  }
}

我不知道他有什么作用, 我尝试将 !=== 改为 ===, 对例子完全没有影响.

然后我尝试将他显示出来

<ListView
    dataSource={this.state.dataSource}
    renderRow={(rowData,rowHasChanged) => <Text>{rowData +':'+ rowHasChanged}</Text>}
    />

结果为

row1:s1
row2:s1

1秒后变为由于`setTimeout(...)`,

row1:s1
row2:s1
row3:s1

rowHasChanged: (r1, r2) => r1 !== r2 中的!== 改为 === 没有任何影响, 那么这个rowHasChanged是做什么的呢,它是ListView它是一个用来控制组件的属性吗?

另外想请教如何学习 react-native 的相关组件,总觉得官方文档看起来生涩.

顺便再问一下:

setTimeout() 我为了访问当前 this 在外面使用了 that 存储,
ES2015中有没有什么方法避免使用that _this 这样的变量

一共三个问题:

  1. rowHasChanged是什么

  2. 学习 react native component 的技巧(例如是否有必要从 Android 了解?)

  3. ES6 中 避免使用 that _this bind 的方法

有好干货在手的请用力砸我

附录: ReactNative官方文档链接

阅读 21.2k
4 个回答
  1. rowHasChanged是 react组件纪录 state 是否更新的一个方法,你修改 等于和不等于并不影响你第一次显示,影响的是你state变化以后的显示情况。
    如果是等于,state变化 页面不更新 , state不变,才更新(一般不用)。不等于就是 state变化 页面立即更新。
    至于你输出s1,是react将数据封装成了新对象,key叫s1
    2.了解当然最好,不了解也是不影响开发的,除非你要做自定义组件

@熊猫 说的很清楚了。
RN的文档不太细致,毕竟项目太活跃了,文档有点脱节,android部分更是。
建议题主找几个开源项目直接上手,改一改,看到什么组件再查文档。结合问答社区,github的issues等学习。

新手上路,请多包涵
  renderRow={(rowData,rowHasChanged) => <Text>{rowData +':'+ rowHasChanged}</Text>}

打印的rowHasChanged 实际是 sectionId,renderRow方法的三个参数 (rowData,sectionId,rowId),你可以打印下看看。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题