Javascript ReactJS:什么是;此.setState(默认狗)&引用;这是什么意思?

Javascript ReactJS:什么是;此.setState(默认狗)&引用;这是什么意思?,javascript,reactjs,Javascript,Reactjs,我正在评估React应用程序(请参见下面的代码)。我知道setStateprops等的含义,以及它的整体工作原理,但我不了解以下内容的含义:this.setState(defaultDogs) 我想知道这是否是标准状态更新的简写。我不确定它是更新了狗的状态还是添加了一个新的状态 下面是该语句所在的代码,后跟/它将变量dogs设置为defaultDogs.dogs变量内容的状态 setState执行状态和传递参数的浅层合并(即,它将用参数中的dogs值替换状态中的dogs)。在该行之后,状态为:

我正在评估React应用程序(请参见下面的代码)。我知道
setState
props等的含义,以及它的整体工作原理,但我不了解以下内容的含义:
this.setState(defaultDogs)

我想知道这是否是标准状态更新的简写。我不确定它是更新了狗的状态还是添加了一个新的状态


下面是该语句所在的代码,后跟
/它将变量
dogs
设置为
defaultDogs.dogs
变量内容的状态

setState
执行状态和传递参数的浅层合并(即,它将用参数中的
dogs
值替换状态中的
dogs
)。在该行之后,状态为:

{
  dogs: [
    {
      name: 'Princess',
      breed: 'Corgi',
      image: 'https://s-media-cache-ak0.pinimg.com/originals/51/ae/30/51ae30b78696b33a64661fa3ac205b3b.jpg'
    },
    {
      name: 'Riley',
      breed: 'Husky',
      image: 'http://portland.ohsohandy.com/images/uploads/93796/m/nice-and-sweet-siberian-husky-puppies-for-free-adoption.jpg'
    }
  ]
}
添加操作如
handleaddog
中所述,方法是获取当前状态,并将其替换为具有额外狗的新状态(理想情况下无需修改先前的状态,这不会反映在上述代码中)

编辑:前面的陈述是错误的


由于
setState
是异步的,您将无法在调用它的函数中直接观察状态的变化。您可以从作为第二个参数提供给
setState
的回调中看到它,因为状态更新完成后将调用回调。

它将替换状态中“dogs”属性的值。

这不是标准状态更新的简写,因为您为函数提供了一个对象。这就像你在写: this.setState({dogs:[…]})

缩短的拼写将是 this.setState({dogs:dogs});
this.setState({dogs})

您是否尝试运行该代码并注销该.state
包含的内容?它只是将
defaultDogs
的值放入
setState
函数中,该函数是一个对象。因此,当我添加console.log(this.state)时,这与
this.setState({dogs:[…]})
@Joe,Sagar Jajoriya相同;在componentWillMount()或getDogs()中,它返回:Object{dogs:[]}@user374324 in
getDogs
,replace
this.setState(defaultDogs)this.setState(defaultDogs),()=>console.log(this.state))<代码>设置状态
将在完成状态更新后调用console.log。状态更新是异步进行的,因此提供这样的回调是立即观察结果的唯一方法。您还可以从
render()
记录状态以查看进度。@Dylan我添加了这个.setState(defaultDogs,()=>console.log(this.state.dogs));是的,我的假设已经被证实了。也就是说,它设定了狗的状态的新值;因为它是应用程序的唯一状态。我想知道为什么这种状态变化在渲染中是可见的,但在这个.setState(defaultDogs)之后不久就不可见了。首先执行componentWillMount(),然后执行getDogs(),因此Dogs被设置为其值,该值仅以您提到的方式可见,而不是使用console.log(this.state.Dogs)。我错过了异步的事情。谢谢。正如您可能看到的那样,该状态还没有在构造器中与Dogs一起定义;所以我不认为你的答案是正确的。你想到的是
.setState({defaultDogs})
。这只是一个没有花括号的变量;在componentWillMount()或getDogs()中,它返回:Object{dogs:[]}空数组中找到的唯一状态。抱歉,您的不是答案。请您制定一个代码示例,说明您的意思。当我添加console.log(this.state)时;在componentWillMount()或getDogs()中,它返回:Object{dogs:[]}是使用空数组找到的唯一状态。抱歉,您的不是答案。更新状态需要时间。您不能在“setState”调用之后立即获得变异的“state”。使用回调。setState({blah:'blah'},function(){console(this.state);})。“componentWillMount”在挂载之前会被调用,挂载后直到卸载才会被调用;在componentWillMount()或getDogs()中,它返回:Object{dogs:[]}这是使用空数组找到的唯一状态。抱歉,您的不是答案。
{
  dogs: [
    {
      name: 'Princess',
      breed: 'Corgi',
      image: 'https://s-media-cache-ak0.pinimg.com/originals/51/ae/30/51ae30b78696b33a64661fa3ac205b3b.jpg'
    },
    {
      name: 'Riley',
      breed: 'Husky',
      image: 'http://portland.ohsohandy.com/images/uploads/93796/m/nice-and-sweet-siberian-husky-puppies-for-free-adoption.jpg'
    }
  ]
}