todoList案例(react版本)之鼠标移入效果

鼠标移入事项时,事项所在行背景色变为浅灰色,且显示删除按钮。
鼠标移出事项时,事项所在行背景色变为白色,且不显示删除按钮。

对此,有两种实现方式,

  1. css实现
  2. js实现

在这里插入图片描述

css实现

代码变更涉及的文件有,

  1. Item/index.jsx
  2. Item/index.css

Item/index.jsx(Item组件)

变动部分:<button className="btn btn-danger" style={{display:'none'}}>删除</button>

import React, { Component } from 'react'
import "./index.css";

export default class Item extends Component {

  handleChange = (id) => {
    return (event) => {
      this.props.checkTodo(id,event.target.checked);
    }
  }

  render() {
    const {id,title,done} = this.props;
    const {handleChange} = this;
    return (
      <li>
        <label>
          <input type="checkbox" defaultChecked={done} onChange={handleChange(id)}/>
          <span>{title}</span>
        </label>
        <button className="btn btn-danger">删除</button> 
      </li>
    )
  }
}

Item/index.css(Item组件)

变动部分: li:hover{ background: #ddd; }li:hover button{ display: block!important; }

li {
  list-style: none;
  height: 36px;
  line-height: 36px;
  padding: 0 5px;
  border-bottom: 1px solid #ddd;
}
  
li label {
  float: left;
  cursor: pointer;
}

li label li input {
  vertical-align: middle;
  margin-right: 6px;
  position: relative;
  top: -1px;
}

li button {
  float: right;
  display: none!important;
  margin-top: 3px;
}

li:before {
  content: initial;
}

li:last-child {
  border-bottom: none;
}

li:hover{
  background: #ddd;
}
li:hover button{
  display: block!important;
}

js实现

代码更改涉及的文件有,

  1. Item/index.jsx,即Item组件

Item/index.jsx(Item组件)

鼠标移入时,状态数据isMouseEnter置为true,li标签背景色设置为浅灰色,显示删除按钮;
鼠标移出时,状态数据isMouseEnter置为false,li标签背景色设置为白色,不显示删除按钮。

import React, { Component } from 'react'
import "./index.css";

export default class Item extends Component {

  state = {
    isMouseEnter:false
  }

  handleMouse = (flag) => {
    return () => {
      this.setState({isMouseEnter:flag})
    }
  }

  handleChange = (id) => {
    return (event) => {
      this.props.checkTodo(id,event.target.checked);
    }
  }

  render() {
    const {isMouseEnter} = this.state;
    const {id,title,done} = this.props;
    const {handleChange,handleMouse} = this;
    return (
      <li 
        onMouseEnter={handleMouse(true)} 
        onMouseLeave={handleMouse(false)}
        style={{background:isMouseEnter?'#ddd':'white'}}
      >
        <label>
          <input type="checkbox" defaultChecked={done} onChange={handleChange(id)}/>
          <span>{title}</span>
        </label>
        <button className="btn btn-danger" style={{display:isMouseEnter?"block":"none"}}>删除</button> 
      </li>
    )
  }
}

相关链接

todoList案例(react版本)之搭建静态页面
todoList案例(react版本)之初始化列表
todoList案例(react版本)之添加todo
todoList案例(react版本)之勾选/去勾选todo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 版本ToDo List 可以使用 React 的组件化开发方式来实现。首先,你需要创建一个名为 `TodoList` 的 React 组件,它将包含待办事项列表并管理其状态。 ```jsx import React, { useState } from 'react'; const TodoList = () => { const [todos, setTodos] = useState([]); const [inputValue, setInputValue] = useState(''); const addTodo = () => { if (inputValue.trim() !== '') { setTodos([...todos, inputValue]); setInputValue(''); } }; const removeTodo = (index) => { const updatedTodos = todos.filter((_, i) => i !== index); setTodos(updatedTodos); }; return ( <div> <input type="text" value={inputValue} onChange={(e) => setInputValue(e.target.value)} /> <button onClick={addTodo}>Add</button> <ul> {todos.map((todo, index) => ( <li key={index}> {todo} <button onClick={() => removeTodo(index)}>Remove</button> </li> ))} </ul> </div> ); }; export default TodoList; ``` 在上面的代码中,我们使用了 React 的 `useState` 钩子来创建了 `todos` 和 `inputValue` 两个状态。`todos` 用于存储待办事项列表,`inputValue` 用于获取输入框的值。 `addTodo` 函数用于将输入框的内容添加到 `todos` 列表中,并清空输入框的值。`removeTodo` 函数用于移除指定位置的待办事项。 在组件的返回部分,我们渲染了一个输入框、一个添加按钮和一个待办事项列表。通过 `map` 方法遍历 `todos` 列表,并为每一个待办事项创建一个包含删除按钮的列表项。 你可以将这个 `TodoList` 组件嵌入到你的 React 应用中,从而实现一个基本的 ToDo List 功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值