Reactjs 反应键不能添加到元素

Reactjs 反应键不能添加到元素,reactjs,key,Reactjs,Key,我是个新手,问这个问题很害羞,但我不知道为什么当我尝试将键绑定到li元素时,在渲染DOM后找不到它。 看起来像: <ul><br /> <li>I dont know why</li><br /> <li>cant find the key</li><br /> </ul><br /> 我不知道为什么 找不到钥匙 在控制台中。 我在点击事件中得到了e.targe

我是个新手,问这个问题很害羞,但我不知道为什么当我尝试将键绑定到li元素时,在渲染DOM后找不到它。 看起来像:

<ul><br />
  <li>I dont know why</li><br />
  <li>cant find the key</li><br />
</ul><br />

  • 我不知道为什么
  • 找不到钥匙


在控制台中。
我在点击事件中得到了e.target.getAttribute('key')的“未定义”。
下面是我的代码(一个简单的todolist):

类写入扩展了React.Component{
建造师(道具){
超级(道具);
this.handle=this.handle.bind(this);
}
句柄(){
const text=document.getElementById('todoIn').value;
this.props.onWriteDown(text);
}
render(){
返回(
确认
);
}
}
类Todolist扩展了React.Component{
建造师(道具){
超级(道具);
这个。n=0;
this.state={list:[]};
todolist=[];
this.handle=this.handle.bind(this);
this.handle\u del=this.handle\u del.bind(this);
}
手柄(米){
this.todolist.push({thing:m,vid:this.n++});
this.setState({list:this.todolist});
}
手柄(e){
var d=this.todolist.forEach((v,i)=>{
if(v.vid==e.target.getAttribute('key')){
返回i;
}
});
这个.todolist.splice(d,1);
this.setState({list:this.todolist});
}
render(){
var=这个;
var todo=[];
//在这里,我为每个todo创建了React元素并绑定了一些属性,但只有CLICK事件是可访问的。。。
this.state.list.forEach(函数(v,i,a){
让temp=
  • {v.thing}
  • ; todo.push(温度); }); 返回(
      {todo}
    ); } } ReactDOM.render( , document.getElementById('root')) );
    键在内部使用,因此React知道哪些组件已添加、更改或删除。
    而且,钥匙也不能通过

    有关更多信息,请查看ReactJS的文档


    正如Hemerson在回答中所说的,您不应该试图访问
    属性,它不会被传递,仅用作对象的内部引用

    相反,您可以这样编写代码:



    ^是的。无论如何,您都不应该尝试使用元素的键进行操作。如果您想要列表元素的某种唯一标识符,请自己添加一个(只是不要命名prop
    key
    ),我学习了这一部分,发现我以前误解了key的含义。谢谢。我发现在呈现的DOM中看不到任何自定义属性,无论它们是设置为字符串还是放在{}。它们都被React丢弃了吗?如果我们需要或想要设置selt定义属性,我们可以做什么。这取决于您所谈论的属性。通常,ReactJS组件可以处理大多数公共场景,而不需要自定义属性。这似乎是对的…最好将数据设置为对象的一部分,而不是html中的属性。谢谢。这对我很有帮助。刚才我在本地尝试,当代码转到forEach()时,d是未定义的,我意识到我在代码中犯了一个错误。我做了一些更改,一切正常。设d=0;this.todolist.forEach((v,i)=>{if(v.vid==id){d=i;}});
    let id = v.vid.toString();
    let temp=<li key={id} onClick={() => that.handle_del(id)}>{v.thing}</li>;
    
    handle_del (id) {
      var d = this.todolist.forEach((v,i)=>{
         if(v.vid==id){
           return i;
         }
      });
      this.todolist.splice(d,1);
      this.setState({list:this.todolist});
    }