如果在ul上绑定事件

如果在ul上绑定事件

import React, {Fragment, Component} from 'react';

// function todo() {
//   var state = {
//     inputVal: "hello xxx",
//     list: []
//   }
//   return (
//     <Fragment>
//       <input value={state.inputVal}/>
//       <ul>
//         <li>苹果</li>
//         <li>橘子</li>
//         <li>西瓜</li>
//       </ul>
//     </Fragment>
//   );
// }

class todo extends Component {
  constructor(props) {
    super(props);
    this.state = {
      inputVal: '',
      list: ['111','222']
    }
  }
  handleInputChange(e) {
    // console.log(e);
    // console.log(this);
    this.setState({
      inputVal: e.target.value
    })
  }
  handleKeyUp(e) {
    if(e.keyCode === 13) { //按了回车
      const list = [...this.state.list, this.state.inputVal];
      this.setState({
        inputVal: '',
        list: list
      })
    }
  }
  handleEvent(e) {
    const li = e.target;
    let list = [...this.state.list];
    list = list.filter((value,index) => {
      return value !== li.innerText;
    });
    this.setState({
      list
    });
  }
  render() {
    return (
      <Fragment>
        <input 
          value={this.state.inputVal} 
          onChange={this.handleInputChange.bind(this)}
          onKeyUp={this.handleKeyUp.bind(this)}
        />
        <ul onClick={this.handleEvent.bind(this)}>
          {
            this.state.list.map((value, index) => {
              return <li key={index}>{value}</li>
            })
          }
        </ul>
      </Fragment>
    )
  }
}
export default todo;

如果像上面这样写,效果也实现了,但是通过比较innerText好像不太好,如果text很多的话。

所以是不是可以在li上绑定一个自定义属性,值是index?后面就通过比较自定义属性筛选。。。

应该怎么实现呢,react咋自定义属性然后取到呀?

还有我发现li上的key,直接li.key或者li.getAttribute() 都不行

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你好,可以在li上绑定一个id值为索引,通过获取点击元素的id值进行删除,如下:

http://img1.sycdn.imooc.com//climg/5dabc58f09de2cdf07280603.jpg

可以修改测试下,祝学习愉快!

欢迎采纳~

好帮手慕糖 2019-10-19 11:24:24

同学你好,可以给li设置的哦。

(1)在点击的时候,传递过去index,对应的索引,

http://img1.sycdn.imooc.com//climg/5daa80670955bf4c08000418.jpg

(2)使用splice在list中删除项目,第一个参数是删除的位置,所以可以是传递过来的参数(对应的索引)。第二个是删除的个数,这里删除个数为1,例:http://img1.sycdn.imooc.com//climg/5daa811909fa24bb07190372.jpg

希望能帮助到你,欢迎采纳。

祝学习愉快!

  • 提问者 慕盖茨6136029 #1
    可是我想问的是在ul上绑定事件的情况呀,绑定在ul上不是更好吗
    2019-10-19 21:06:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师