当前位置: 首页 > 面试题库 >

react.js中的生命周期事件状态和prevState

胥英奕
2023-03-14
问题内容

下面是一个简单的计数器。但是我有3个问题。

  1. 第3行的状态是什么?它看起来像一个全局变量,如果有varconst在它之前会很有意义。那是生命周期函数/变量吗?

  2. 我必须从react导入Component吗?我记得我在v15中不需要这样做。

  3. prevState来自哪里?

import React, { Component } from 'react';

class Counter extends Component {
  state = { value: 0 };

  increment = () => {
    this.setState(prevState => ({
      value: prevState.value + 1
    }));
  };

  decrement = () => {
    this.setState(prevState => ({
      value: prevState.value - 1
    }));
  };

  render() {
    return (
      <div>
        {this.state.value}
        <button onClick={this.increment}>+</button>
        <button onClick={this.decrement}>-</button>
      </div>
    )
  }
}

问题答案:

这是一个带有注释代码的演示,可为您提供更多信息:http :
//codepen.io/PiotrBerebecki/pen/rrGWjm

1.第3行的状态是什么? 看起来像全局变量,如果前面有var或const则有意义。那是生命周期函数/变量吗?

state第3行中的内容只是Counter组件的一个属性。使用ES6语法在React中初始化状态的另一种方式如下:

constructor() {
  super();
  this.state = {
    value: 0
  }
}

反应文档:https : //facebook.github.io/react/docs/reusable-
components.html#es6-classes

[React ES6 class]
API与React.createClass相似,但getInitialState除外。无需提供单独的getInitialState方法,而是
在构造函数中设置自己的state属性

2.我必须从react导入Component吗? 我记得我不需要在v15中这样做。

您也可以通过以下方式导入React并定义一个类:

import React from 'react';

class Counter extends React.Component {
...

下面还允许您使用组件API:

import React, { Component } from 'react';

class Counter extends Component {
...

3. prevState来自哪里?

prevState来自setState
api:https
://facebook.github.io/react/docs/component-
api.html#setstate

也可以传递带有签名功能的功能(状态,道具)。在某些情况下,当您希望在设置任何值之前加入要查询state +
props先前值的原子更新时,这可能会很有用。例如,假设我们要增加state的值:

this.setState(function(previousState, currentProps) {
  return {
     value: previousState.value + 1
  };
});

您经常会看到开发人员通过以下方式更新状态。这比上面的方法不可靠,因为状态可以异步更新,并且我们不应该依赖其值来计算下一个状态。

 this.setState({
   value: this.state.value + 1 // prone to bugs
 });

来自我的Codepen的完整代码:

class Counter extends React.Component {

  // state = { value: 0 };

  // you can also initialise state in React
  // in the constructor:
  constructor() {
    super();
    this.state = {
      value: 0
    }
  }

  increment = () => {
    this.setState(prevState => ({
      value: prevState.value + 1
    })); 
  }

  decrement = () => {
    this.setState(prevState => ({
      value: prevState.value - 1
    }));  
  }

  render() {
    return (
      <div>
        {this.state.value}
        <button onClick={this.increment}>+</button>
        <button onClick={this.decrement}>-</button>
      </div>
    )
  }
}


ReactDOM.render(
  <Counter />,
  document.getElementById('app')
);


 类似资料:
  • 生命周期事件 There are two module lifecycle events OnModuleInit and OnModuleDestroy. You should use them for all the initialization stuff and avoid to work in the constructor. The constructor should only be

  • 问题内容: 我试图理解之间的差异和。 我知道可以对bean进行定义,即在创建bean实例之前先执行它,然后在实例化bean和调用生命周期事件之后再执行它。 这是不是在实例化之前就称为Spring生命周期事件的一部分,而不是Spring生命周期事件的一部分?请验证我的理解是否正确。 问题答案: 是一个接口,实现它的bean实际上是经过Spring生命周期的bean(下面的示例),但是这些bean不参

  • 要了解Spring事件是否适合我正在处理的任务,我需要了解它们是如何工作的,它们存储在哪里?因为我可以猜测它们存储在Spring应用程序上下文中,如果应用程序崩溃则会消失,我的猜测正确吗?

  • 本文向大家介绍说说线程的生命周期和状态?相关面试题,主要包含被问及说说线程的生命周期和状态?时的应答技巧和注意事项,需要的朋友参考一下 Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态(图源《Java 并发编程艺术》4.1.4 节)。 线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示(图源《Java

  • 我对铁锈寿命的学习过程如下(基于铁锈书): 我想注释,当引用后面的值超出范围时 通常(并不总是!请参阅. data部分,即'静态')值位于块中 我们注释像这样的块,例如结构字段像 。 在哪一点上我的理解是错误的?提前感谢你对我的宽容。 免责声明:

  • 回顾一下我们实现的一个关于时钟的例子。 我们仅仅是知道如何用一种方法更新用户界面。 我们仅仅是使用了ReactDOM.render()每一秒重新渲染了页面而已: function tick(){ const element = ( <div> <h1>Hello,world!</h1>