【问题标题】:React Native sectionHeaderHasChanged: (s1, s2) => s1 !== s2,React Native sectionHeaderHasChanged: (s1, s2) => s1 !== s2,
【发布时间】:2016-01-22 04:36:49
【问题描述】:

文档中没有关于此的任何内容,因此任何人都可以告诉我这到底是什么意思:

sectionHeaderHasChanged: (s1, s2) => s1 !== s2,

或者这个:

sectionHeaderHasChanged: (h1, h2) => h1 !== h2,

你通常在这里看到它:

var ds = new ListView.DataSource({
  rowHasChanged: (r1, r2) => r1 !== r2,
  sectionHeaderHasChanged: (h1, h2) => h1 !== h2,
});

虽然我们在这里,但也不太清楚关于 rowHasChanged 的​​第一行是什么/意味着什么。

【问题讨论】:

  • 您是否对命名参数或 lambda 表达式或两者都感到困惑?
  • 是的一切。完全不确定代码是如何使用它的。

标签: react-native sectionheader


【解决方案1】:

这里有两个概念,Arrow 函数和 sectionHeaderHasChanged 和 rowHasChanged 属性。

箭头函数: 这是ecmascript 6 中的一项新功能,它允许快速创建小型匿名函数,这些函数保留在周围代码enter code here 的上下文中,例如:

语法很简单:(arguments) => {function body} 例如以下两个会将相同的函数回调分配给 onclick:

btn.onclick = (event) => {console.log(event)} 

btn.onclick = function(event){console.log(event)}

sectionHeaderHasChanged && rowHasChanged: 许多特性是 react-native 的,并没有像我希望的那样有很好的文档记录,但现在还处于早期阶段,我能说的最好,

仅重新渲染更改的行 - rowHasChanged 函数提供给 数据源告诉 ListView 是否需要重新渲染一行 因为源数据已更改 - 请参阅 ListViewDataSource 了解更多信息 详情。

react facebook

数据源对象允许两个回调是徒劳的: 1. 行已更改 2.sectionHeaderHasChanged 这两个检查以查看先前呈现的 row/sectionHeader(分别)是否已更改并应在用户向上和向下滚动列表时呈现。

在您上面的代码 sn-p 的情况下,您正在给 dataSource 回调 ARROW 函数,每个函数接受两个参数:

  1. 渲染的row/sectionHeader和
  2. 当前行/sectionHeader 如果 row/sectionHeader 未更改且不应重新渲染,则函数返回 false,如果已更改且应重新渲染,则返回 true。

注意: 主体中只有一条语句的 ARROW 函数可以省略花括号和返回运算符,它们将自动返回其一个表达式的结果。 例如(a, b) => a + b(a, b) => {return a + b}function(a, b){return a + b} 相同

【讨论】:

  • 感谢您的详细解释,但我仍然不太清楚。 s1 !== s2 似乎在问一个 IF,但之后什么都没有。
  • “严格不等于”运算符 (!==) “如果操作数的类型相同但不相等或不同类型,则返回 true。” - 根据文档 - developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…
  • 好的,我明白了,所以它只返回“真”或“假”。
  • @Hasen 是的,只有一个表达式的箭头函数,在这种情况下,比较 s1 !== s2 会自动返回该表达式的结果,不需要运算符返回。它与 function(s1, s2){return s1 !== s2} 完全相同,即它返回 true 是 s1 与 s2 不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
相关资源
最近更新 更多