javascript - map() 作为 React 中 setState() 的回调,奇怪地运行条件两次

标签 javascript reactjs

我正在将对象数组加载到组件的状态中。这是数组的内容

const toDoData = [
    {
        id:1,
        task:"Take out trash",
        completed : false
    },
    {
        id:2,
        task:"Wash the dishes",
        completed : true
    },
    {
        id:3,
        task:"Do groceries",
        completed : false
    },

我将其加载到状态中;

this.state={
     data:toDoData
 }

我想通过单击按钮来更改 object.completed 的 bool 值,并通过以下方式更新状态来完成此操作;

changeStatus(id){


        this.setState(prev=>{

            const updatedtodo=prev.todo.map(todo=>{
                if(todo.id==id){
                    todo.completed = ! todo.completed
                    console.log(todo.completed)
                }
                return todo
            })

        return{
            todo:updatedtodo
        }    
        })    
    }

但是由于某种原因,其中的条件语句最终运行了两次(console.log 语句显示了两次),这将 bool 值设置回其原始值。有人可以告诉我这是为什么吗?以及如何解决这个问题?提前致谢

最佳答案

changeStatus(id){


    this.setState(prev=>{
        const clonePrev = {...prev};
        const updatedtodo=clonePrev.todo.map(todo=>{
            if(todo.id==id){
                todo.completed = ! todo.completed
                console.log(todo.completed)
            }
            return todo
        })

    return{
        todo:updatedtodo
    }    
    })    
}

关于javascript - map() 作为 React 中 setState() 的回调,奇怪地运行条件两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60949465/

相关文章:

javascript - 数组索引的开关大小写

javascript - React Promise.all 挑战

javascript - jquery 设置基础 href

javascript - webpack入口和输出路径

reactjs - 如何在React中的单页面应用程序中进行代码拆分?

css - react css 样式语法 - 在一行中使用变量和文本设置 css prop 的值

javascript - 将 item-left-edit 更改为 item-right-edit 为 Ionic

javascript - removeChild语法——我需要一双有经验的眼睛

javascript - 如何使用 Context API 在 React 中组合多个 reducer

javascript - react + REDUX : on redux state change mapStateToProps updating state but view is not rendering as per new state