Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用setState对本机更新对象作出反应_Javascript_React Native - Fatal编程技术网

Javascript 使用setState对本机更新对象作出反应

Javascript 使用setState对本机更新对象作出反应,javascript,react-native,Javascript,React Native,是否可以使用setState更新对象?我尝试了以下代码: import moment from 'moment'; constructor() { super(); this.state = { pressedDate:{ }, } } updateState = (day) => { let updateDay = moment(day.dateString).format(_format); //When I co

是否可以使用
setState
更新对象?我尝试了以下代码:

import moment from 'moment';

constructor() {
    super();
    this.state = {
      pressedDate:{
      },
    }
  }

updateState = (day) => {
    let updateDay = moment(day.dateString).format(_format);
    //When I console.log updateDay, I get this '2019-06-30' 
    console.log(updateDay,'updateDay')

   //I want to update pressedDate with updateDay which is '2019-06-30' 
    this.setState({
      pressedDate:{
         updateDay : {dots: [vacation, massage, workout], selected: true}
      }
    })
  }
我试图用
updateDay
更新我的对象,但运行此代码时什么也没发生

您说过“什么都没有发生”,但该代码显然将此.state.pressedDate替换为一个新对象,该对象仅具有
updateDay
属性

如果您想添加/更新
updateDay
而不完全替换
pressedDate
(即,如果它有其他属性),您可以制作一份副本,然后更新副本。使用属性扩展的惯用方法是:

this.setState(({pressedDate}) => ({
    pressedDate: {
       ...pressedDate,
       updateDay : {dots: [vacation, massage, workout], selected: true}
    }
}));
需要注意的两个关键事项:

  • 它使用的是回调版本的
    setState
    。因为,无论何时根据现有状态设置状态(更新的
    pressedDate
    ),您都必须使用回调版本(除
    updateDay
    之外的
    pressedDate
  • …按EdDate
    将当前版本的属性展开到正在创建的新对象中。然后我们添加
    updateDay
    ,这将覆盖以前的任何一个

  • 你凭什么认为什么都没发生?确实发生了一些事情,您用一个新对象替换
    此.state.pressedDate
    。请使用演示问题的工具更新您的问题,最好是使用堆栈片段(
    []
    工具栏按钮)运行的工具。堆栈代码段支持React,包括JSX。(我知道您使用的是React Native,但React示例足以说明问题并让人们帮助您解决问题。)谢谢您的回答。我认为你是对的,但我有一个问题。当我说什么都没有发生时,我的意思是
    updateDay
    ,它是
    2019-06-30
    在我调用
    setState
    时没有被替换。事实上,当我遵循您的代码后,当我
    console.log(this.state.pressedDate)
    时,它仍然不会将
    updateDay
    替换为“2019-06-30”。@kirimi-这是因为。但更新状态将使React重新呈现组件(也是异步的)。如果在状态更新后需要回调,可以为
    setState
    ,提供第二个函数。