You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何实现元素移除与动画?TodoList异常问题排查

待办事项(TodoList)应用问题

我刚学习React,正在开发一个待办事项应用,组件结构包含Task函数组件、Tasks类组件、ToDoList类组件。添加任务时通过.add_task CSS类实现滑入动画,删除任务时计划通过.remove_task类实现动画,逻辑为点击删除按钮触发setClose将状态改为true,添加移除动画并在500ms后调用onRemoveClick移除任务。但实际效果不符合预期:Tasks组件传递的值正确,但Task组件显示内容与传入值不符,怀疑是提前更新任务状态导致问题。

Task函数组件代码

function Task(props){
    const [close, setClose] = useState(false);
    const [task, setTask] = useState(props.toDo);

    let animation = "task";
    console.log("[TASK] ", task)
    if (close){
        setTimeout(() => {props.onRemoveClick()}, 500);
    }
    close ? animation += " remove_task" : animation += " add_task";


    return(
        <div className={animation} key={props.id}>
           <input 
              className="task_text" 
              value={task} 
           />
           <div className="delete_task" onClick={() => {setClose(true);}}></div>
        </div>

    )

}

Tasks类组件代码

class Tasks extends React.Component{  
    renderTask(task, id){
        return <Task
            task = {task}
            id = {id}
            onRemoveClick = {() => this.props.onRemoveClick(id)}
       />
     }

     render(){
         const tasks = this.props.tasks.map((step, move) => {
             console.log("[TASKS] ", step)
             return(
                 this.renderTask(step, move)
             )
         })

         return (
            <div className="tasks">{tasks}</div>
        )
    }
 }

ToDoList类组件代码

class ToDoList extends React.Component{
    constructor(props){
        super(props);
        this.state = {
            tasks : []
        }
    }
    removeTask(id){
        const tasks = this.state.tasks;
        tasks.splice(id, 1)
        this.setState({tasks : tasks})
    }
    render(){
        return(
            <div className="ToDoList_box">
                <Tasks
                    tasks = {this.state.tasks}
                    onRemoveClick = {(id) => this.removeTask(id)}

                 />

            </div>
        )
    }
} 

异常效果说明

  • 添加5个任务后显示正常
  • 删除第3个任务后,Task组件显示内容与传入值不符

内容的提问来源于stack exchange,提问作者nyar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:20:43