你就把TodoItem理解为一个新的HTML标签,而delete就是这个标签的某一个属性值,由于TodoItem这个标签是你自己自定义封装的,所以这个标签的属性就是由你决定的,所以这个delete可以是你自己定义的任何名字,名字不是关键,关键的是这个名字的值,因为在TodoItem组件里起到最终作用的是delete这个属性名最终指向的实际的函数。你在父组件里向TodoItem传递的是函数a,那在TodoItem里最终执行的就是函数a,在父组件里向TodoItem传递的是函数b,那在TodoItem里最终执行的就是函数b
react 16.3.1
在vue当中子组件给父组件传值是通过分发事件完成的
为了拷贝一个副本出来,避免直接操作list
你看下你的子组件是用的傀儡组件(函数定义的),还是类组件,傀儡组件直接使用props.key,因为傀儡组件的this===undefined
小哥,你这是没理解state状态与props属性的定义呀,props属性是不能修改的,只读,子组件要改变父组件的状态数据,需要通过父组件传递一个属性方法给子组件<TodoItem handleDelete={this.handleDate()} />
this.handleDate()这个方法是在父组件定义的,然后子组件通过方法调用 this.props.handleDelete()
建议:<div onClick={() => this.props.handleDelete }>{this.props.content}</div>
可以看官网文档里面事件处理一节,讲得很清楚。
https://react.docschina.org/docs/handling-events.html
可以让代码结构清晰,也可以提升组件的利用性。……
可以把onClick当作属性传过去之后直接使用
<todoItem onClick={this.handleDelete.bind(this, index)} />
然后todoItem这边可以直接这样写
<div onClick={this.props.onClick}>todo item</div>
从父组件传递过来的。父组件:TodoList.js
<TodoItem delete={this.handleDelete}
content={item}
key={index}
index={index}
/>
听声音像是青轴的
父组件引入子组件的时候已经绑定了key属性了,子组件只是内容展示,又没使用map遍历数据列表,因此不用再子组件里再绑定key
删除的下标不对了