相关疑难解决方法(0)

了解React.js中数组子项的唯一键

我正在构建一个React组件,它接受JSON数据源并创建一个可排序的表.
每个动态数据行都有一个分配给它的唯一键,但我仍然收到以下错误:

数组中的每个子节点都应该具有唯一的"键"支柱.
检查TableComponent的render方法.

我的TableComponentrender方法返回:

<table>
  <thead key="thead">
    <TableHeader columns={columnNames}/>
  </thead>
  <tbody key="tbody">
    { rows }
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

TableHeader组件是单行,并且还具有分配给它的唯一键.

每个rowin rows都是使用具有唯一键的组件构建的:

<TableRowItem key={item.id} data={item} columns={columnNames}/>
Run Code Online (Sandbox Code Playgroud)

TableRowItem看起来像这样:

var TableRowItem = React.createClass({
  render: function() {

    var td = function() {
        return this.props.columns.map(function(c) {
          return <td key={this.props.data[c]}>{this.props.data[c]}</td>;
        }, this);
      }.bind(this);

    return (
      <tr>{ td(this.props.item) }</tr>
    )
  }
});
Run Code Online (Sandbox Code Playgroud)

是什么导致了唯一的关键道具错误?

javascript reactjs

549
推荐指数
9
解决办法
48万
查看次数

有没有办法让React为孩子们自动定义"钥匙"?

我正在学习React,我偶然发现了这个"充满活力的孩子"的怪癖.

带有代码示例的序言:

// Render Pass 1
<Card>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</Card>

// Render Pass 2
<Card>
  <p>Paragraph 2</p>
</Card>
Run Code Online (Sandbox Code Playgroud)

在第二render()遍中,似乎vdom diffing的工作方式是删除第二个孩子,然后将第一个孩子的文本转换为"第2段".这很快,但如果你需要国家坚持说......第二个孩子,你会发现奇怪的事情发生了!

所以React建议对这些标签使用"key"属性.现在,vdom差异将是惊喜的,你会看到状态得到保留renders().

我的问题:有没有办法让React自己设置"密钥"而不是按照他们建议的方式进行操作?

reactjs

14
推荐指数
1
解决办法
6551
查看次数

JavaScript 中浮点数的最大精度(小数点后)是多少

我正在使用的算法需要从 JavaScript 中的浮点数中压缩尽可能多的精度。我不介意精度是否来自非常大的数字或小数点后有很多数字,我只是实际上需要尽可能多的数字。

(如果你关心为什么,它是一个拖放排名算法,在重新平衡之前必须处理大量的减半。我也知道有更好的基于字符串的算法,但数值方法适合我的目的)

MDN文档说

JavaScript Number 类型是双精度 64 位二进制格式 IEEE 754 值,类似于 Java 或 C# 中的 double。这意味着它可以表示小数值,但它可以存储的内容有一些限制。数字仅保留小数点后 17 位左右的精度;算术需要四舍五入。

我应该如何最好地使用“17 位小数精度”?

小数点后17位是不是意味着“包括小数点前后总共17个数字”

例如(添加下划线代表千位分隔符以提高可读性)

# 17 numerals: safe
111_222_333_444_555_66

# 17 numerals + decimal point: safe
111_222_333_444_555_6.6
1.11_222_333_444_555_66

# 18 numerals: unsafe
111_222_333_444_555_666

# 18 numerals + decimal point: unsafe
1.11_222_333_444_555_666
111_222_333_444_555_66.6
Run Code Online (Sandbox Code Playgroud)

我认为数字的精度决定了您可以使用的数字数量,并且这些数字中小数点的位置实际上是学术性的。

  • 我对问题的思考是否正确?
  • 小数点的存在对计算有影响还是仅仅与存在的数字数量有关
  • 我应该假设 17 数字是安全的/18 是不安全的吗?
  • 这是否因浏览器而异(不仅是现在,而且在 10 年的时间窗口内,人们是否应该假设浏览器的精度可能会提高)?

javascript floating-point precision ieee-754

7
推荐指数
1
解决办法
4495
查看次数