代码之家  ›  专栏  ›  技术社区  ›  Advena

反应-功能设置状态(以前的状态)与新的更新值不同?

  •  2
  • Advena  · 技术社区  · 6 年前

    React

    要更新状态,大多数课程建议这样做:

     const updatedNinjas = [...this.state.ninjas, newNinja];
    
        this.setState({
          ninjas: updatedNinjas
        });
    

    setState 是“异步的”,官方 react documentation 建议使用以前的状态并基于此状态进行更新。

    this.setState(prevState => ({
          ninjas: [...prevState.ninjas, newNinja]
        }));
    

    3 回复  |  直到 6 年前
        1
  •  13
  •   falinsky Giri Dharan    6 年前

    setState 使用函数的位置:

    this.setState(prevState => ({
      ninjas: [...prevState.ninjas, newNinja]
    }));
    

    甚至:

    this.setState(({ninjas}) => ({
      ninjas: [...ninjas, newNinja]
    }));
    

    这是因为状态更改是异步的,并且由于性能原因可以成批进行。

    如果你用某个变量改变状态

    this.setState({
      answer: 42
    });
    

    关于你的

    实际上,您每次都创建一个新数组,但是您创建它时使用的是一些项集,这些项集在执行实际状态更改时可能不相关 React 在引擎盖下面。

        2
  •  0
  •   Ammar Tariq    6 年前

    使用数组设置状态有助于我在分页情况下工作,而不会丢失任何来自状态的数据

    this.setState(prevState => ({
              ninjas: [...prevState.ninjas, ...newNinja]
    }));
    
        3
  •  -4
  •   Asad Mehmood    6 年前

    在下面的代码中

    …这个州,忍者

    这些 ... is called spread

    const updatedNinjas = [...this.state.ninjas, newNinja];
    
        this.setState({
          ninjas: updatedNinjas
        });