React.js与'具有相同密钥的两个孩子'混淆

炼金术士

我正在使用React在页面上安装两个相同的组件,

var SelectBox = React.createClass({
  getDefaultProps: function() {
    return {
      value: []
    };
  },
  getInitialState: function() {
    return {checked: this.props.value,count: 1};
  },
  handleClick: function() {
    var opt = this.state.checked;
    opt.push({id: this.state.count, name: this.state.count});
    this.setState({checked: opt, count: this.state.count + 1});
  },
  render: function() {
    var that = this;
    var options = this.state.checked.map(item => <option key={'checked-' + that.props.name + item.id} value={item.id}>{item.name}</option>);
    return (
      <div>
        <select multiple={true}>
          {options}
        </select>
        <button type="button" onClick={this.handleClick}>add</button>
      </div>
    );
  }
});
React.render(
  <SelectBox name='one'/>,
  document.getElementById('one')
);
React.render(
  <SelectBox name='two'/>,
  document.getElementById('two')
);

然后单击“一个”的按钮,没关系,但是当我单击“两个”的按钮时,一些“一个”出现在“两个”中,为什么?这让我感到困惑。控制台显示:

Warning: flattenChildren(...): Encountered two children with the same key, `.$checked-two1`. Child keys must be unique; when two children share a key, only the first child will be used.

但是做些改变

var a = [{id: 5, name: 5}];
React.render(
  <SelectBox name='one' value={a}/>,
  document.getElementById('one')
);

它工作正常。发生了什么?有什么问题还是错误?

炼金术士

哦,我发现了真正的原因,getDefaultProps一次调用并缓存了,返回的任何复杂对象getDefaultProps()将在实例之间共享,而不是被复制,因此所有未传递显式值prop的SelectBox组件都将在状态下共享相同的检查数组引用。在这种情况下,我应该写:

  getInitialState: function() {
    var tmp = this.props.value.concat();
    return {checked: tmp, count: 1};
  },

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

遇到两个具有相同键“ 1”的孩子。密钥应该是唯一的,以便组件在更新中保持其身份。Laravel React JS

来自分类Dev

warning.js:45警告:flattenChildren(...):遇到两个具有相同密钥`.1:$ ..'的孩子

来自分类Dev

警告:flattenChildren(...):在React Mobx组件中遇到了两个具有相同键的孩子

来自分类Dev

带有 React 的 ExtJS,范围混淆

来自分类Dev

SAX 混淆 XML 中具有相同名称的两个节点

来自分类Dev

index.js:1警告:遇到两个具有相同索引`index`的孩子。索引是唯一的

来自分类Dev

比较具有不同混淆性的两个.jar

来自分类Dev

具有两个预测的数据帧的混淆矩阵

来自分类Dev

与 React Router 的混淆

来自分类Dev

反应:遇到两个具有相同密钥的孩子

来自分类Dev

混淆:JS保护

来自分类Dev

编译或混淆节点js

来自分类Dev

JS高阶混淆

来自分类Dev

混淆js对象属性

来自分类Dev

两个不同父母的孩子可以在React中拥有相同的键吗

来自分类Dev

GCM API密钥混淆

来自分类Dev

在FireBase部署之前混淆JS

来自分类Dev

当两个组件采用相同的参数时,React.js如何提取方法?

来自分类Dev

如何在两个不同的 .js 文件中使用相同的数据(React Native)

来自分类Dev

用react-hook-form检查两个TextField具有相同的值

来自分类Dev

React 基于另外两个具有相同键名的新数组

来自分类Dev

Javascript对象原型混淆(带有require.js和three.js)

来自分类Dev

如何对具有相同ID的两个div containsig元素使用通用js函数?

来自分类Dev

警告:遇到了两个具有相同密钥“0”的孩子

来自分类Dev

React中的键重复,无法解决问题。遇到两个孩子用相同的钥匙

来自分类Dev

React 使用扩展组件创建类混淆

来自分类Dev

在Node.js中与q和Promise有点混淆

来自分类Dev

Firebase v3 JS库是否有未混淆/未缩小(调试)的版本?

来自分类Dev

在Node.js中与q和Promise有点混淆

Related 相关文章

  1. 1

    遇到两个具有相同键“ 1”的孩子。密钥应该是唯一的,以便组件在更新中保持其身份。Laravel React JS

  2. 2

    warning.js:45警告:flattenChildren(...):遇到两个具有相同密钥`.1:$ ..'的孩子

  3. 3

    警告:flattenChildren(...):在React Mobx组件中遇到了两个具有相同键的孩子

  4. 4

    带有 React 的 ExtJS,范围混淆

  5. 5

    SAX 混淆 XML 中具有相同名称的两个节点

  6. 6

    index.js:1警告:遇到两个具有相同索引`index`的孩子。索引是唯一的

  7. 7

    比较具有不同混淆性的两个.jar

  8. 8

    具有两个预测的数据帧的混淆矩阵

  9. 9

    与 React Router 的混淆

  10. 10

    反应:遇到两个具有相同密钥的孩子

  11. 11

    混淆:JS保护

  12. 12

    编译或混淆节点js

  13. 13

    JS高阶混淆

  14. 14

    混淆js对象属性

  15. 15

    两个不同父母的孩子可以在React中拥有相同的键吗

  16. 16

    GCM API密钥混淆

  17. 17

    在FireBase部署之前混淆JS

  18. 18

    当两个组件采用相同的参数时,React.js如何提取方法?

  19. 19

    如何在两个不同的 .js 文件中使用相同的数据(React Native)

  20. 20

    用react-hook-form检查两个TextField具有相同的值

  21. 21

    React 基于另外两个具有相同键名的新数组

  22. 22

    Javascript对象原型混淆(带有require.js和three.js)

  23. 23

    如何对具有相同ID的两个div containsig元素使用通用js函数?

  24. 24

    警告:遇到了两个具有相同密钥“0”的孩子

  25. 25

    React中的键重复,无法解决问题。遇到两个孩子用相同的钥匙

  26. 26

    React 使用扩展组件创建类混淆

  27. 27

    在Node.js中与q和Promise有点混淆

  28. 28

    Firebase v3 JS库是否有未混淆/未缩小(调试)的版本?

  29. 29

    在Node.js中与q和Promise有点混淆

热门标签

归档