Javascript React-同时设置状态和获取值

Javascript React-同时设置状态和获取值,javascript,reactjs,Javascript,Reactjs,我正在用React制作一个ToDo应用程序。我有以下数据: getInitialState: function(){ return { name:"Michael", tasks:[ {task:"Go to the gym", completed:false, id:1 }, {task:"Do yoga", completed:false, id:2 }, {task:"Buy

我正在用React制作一个ToDo应用程序。我有以下数据:

getInitialState: function(){
    return {
        name:"Michael",
        tasks:[
            {task:"Go to the gym", completed:false, id:1 }, 
            {task:"Do yoga", completed:false, id:2 },
            {task:"Buy groceries", completed:true, id:3 },
            {task:"Get tire fixed", completed:true, id:4}
        ],
        numCompleted:null
    }
},
如何获得初始状态下显示的numCompleted值?在实例化之前,我无法计算它

谢谢你的帮助。

怎么样:

getInitialState: function(){
    var tasks = [
        {task:"Go to the gym", completed:false, id:1 }, 
        {task:"Do yoga", completed:false, id:2 },
        {task:"Buy groceries", completed:true, id:3 },
        {task:"Get tire fixed", completed:true, id:4}
    ];
    return {
        name:"Michael",
        tasks:tasks,
        numCompleted:tasks.filter(function(task) {
            return task.completed;
        }).length
    }
},

如果需要,您可以直接计算…

您是否可以用以下方式计算:

getInitialState: function(){

   var _tasks = [{task:"Go to the gym", completed:false, id:1 }, 
           {task:"Do yoga", completed:false, id:2 },
           {task:"Buy groceries", completed:true, id:3 },
           {task:"Get tire fixed", completed:true, id:4}];

  var completedCount = 0;

  for( var i = 0; i < tasks.length; i++ ) {
     if ( task[i].completed ) {
        completedCount++;
     }
  }

   return {
       name:"Michael",
       tasks:_tasks,
       numCompleted: completedCount
   }
getInitialState:function(){
var_tasks=[{task:“去健身房”,completed:false,id:1},
{任务:“做瑜伽”,完成:false,id:2},
{任务:“购买杂货”,完成:true,id:3},
{任务:“修复轮胎”,完成:true,id:4}];
var completedCount=0;
对于(变量i=0;i
},

既然这是一个“计算”属性,无论何时状态发生变化,它都会发生变化,为什么不在组件的
渲染中这样做呢

getInitialState: function(){
    return {
        name:"Michael",
        tasks:[
            {task:"Go to the gym", completed:false, id:1 },
            {task:"Do yoga", completed:false, id:2 },
            {task:"Buy groceries", completed:true, id:3 },
            {task:"Get tire fixed", completed:true, id:4}
        ]
    }
    render: function () {
      let numCompleted = this.state.tasks.reduce(function (completed, task) {
        return completed + task.completed ? 1 : 0;
      }, 0);

      // render tasks
    }
},

当您需要时,为什么不计算
numCompleted
?您不必在更新任务的
completed
值时进行更新?这似乎是一个不错的解决方案,但我如何才能将numCompleted传递给其他组件?您可以像平常一样将
numCompleted
作为道具传递。如果此组件的多个同级/父级组件需要知道
numCompleted
,则该状态应保留在其他位置。