javascript - React 类组件在重新渲染时更新类变量的值,但不更新函数组件

标签 javascript reactjs es6-class

我正在玩ReacJS。我注意到一件事—— 如果类组件重新渲染期间类变量的更新值在屏幕中更新,如下所示:

import React, { Component } from "react";

class Temp extends Component {
  constructor(props) {
    super(props);
    this.count = 0;
    this.state = {
      foo: 0,
    };
  }
  render() {
    return (
      <button
        onClick={() => {
          this.setState({ foo: this.state.foo + 1 });
          this.count++;
        }}
      >
        {this.count} - {this.state.foo}
      </button>
    );
  }
}

export default Temp;

但是对于函数组件,普通变量的更新值在重新渲染期间不会在屏幕中更新。

import React, { useRef, useState } from "react";

const RefComponent = () => {
  const [stateNumber, setStateNumber] = useState(0);
  let refVar = 0;

  function incrementAndDelayedLogging() {
    setStateNumber(stateNumber + 1);
    refVar++;
  }

  return (
    <div>
      <button onClick={incrementAndDelayedLogging}>Click</button>
      <h4>state: {stateNumber}</h4>
      <h4>refVar: {refVar}</h4>
    </div>
  );
};

export default RefComponent;


这就是 React 的实现方式还是我在搞乱什么?我很想知道这件事。 谢谢

最佳答案

React 中的函数式组件没有实例,因此类或实例变量之类的东西不一定有意义;就像其他人在此处的评论中指出的那样,React 将渲染(调用)功能组件并“重置”任何未明确状态的局部变量。 Behavior like instance variables for functional components are achieved with useRef .

来自文档:

The useRef() Hook isn’t just for DOM refs. The “ref” object is a generic container whose current property is mutable and can hold any value, similar to an instance property on a class.

关于javascript - React 类组件在重新渲染时更新类变量的值,但不更新函数组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61310116/

相关文章:

javascript - 使用 Sinon 模拟构造函数中设置的类属性

node.js - 初始化全局类并使其在整个 Node 应用程序中可用

javascript - 压缩字典

javascript - 如何在 highcharts 中加载外部 json 数据以显示条形图

javascript - 构建多页面 React 应用程序

javascript - componentDidMount 中的状态始终为 null,应该有来自任务变量的数据

javascript - ES 6 Harmony 异步类方法链接

javascript - Discord 随机图像机器人垃圾邮件

javascript - Braintree.js drop-in,动态更新客户端 token ?

javascript - 限制reactjs中的字符数