当前位置: 首页 > 知识库问答 >
问题:

误解的反应。FC与类组件交互

孔权
2023-03-14

我是个新来的反应者,不懂什么。我有两个组件:父函数组件和子类组件。假设,从FC我需要从useState钩子传递非常简单的数组。当构造函数中的类内组件尝试注销道具时,结果是空数组。但在组件中成功渲染数组项。如果我不使用-useState钩子并将现有的array-console.log(props)结果传递给该数组。为什么会这样?我认为它与异步操作有关,但如果需要在基于props的构造函数中定义初始状态呢?因为道具没有定义,我不能做。你能帮我弄清楚吗

const FunctionalComponent = () => {
   const [state, setState] = useState([]);

   useEffect(() => {
      setState(['Jim', 'Bob', 'Tom']);
   }, []);

   return (
      <div>
         <ClassComponent names={state} />
      </div>
   );
}

// And class component

class ClassComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      // Some state ...
    };

    console.log(props); --- // []

  }
  render() {
    const { names } = this.props;
    return <div>{names}</div>;  -- // renders items
  }
}

https://codesandbox.io/s/props-to-class-component-from-usestate-5z5k3?file=/src/index.js

共有2个答案

梅欣然
2023-03-14

您的初始状态是由useState定义[]。在这种状态下,功能组件最初呈现,它还以[]作为初始道具呈现ClassComponent。这就是传递给构造函数的内容。

之后不再调用构造函数。相反,新的props将仅分配给组件。

虞华彩
2023-03-14

您可以看到类组件如何呈现正确的数据,但console.log输出并不适用于它们。这是因为创建和更改状态是异步操作。要查看道具是如何更改的,您必须为FC使用use效应,为类组件使用组件didUpdate。

class Counter extends React.Component {
  constructor(props) {
    super(props);
  }
  componentDidUpdate() {
    console.log(this.props.names)
  }
  render() {
    const { names } = this.props;
    return <div>{names}</div>;
  }
}

或者,您可以将console.log放在渲染部分的右侧:

render() {
  console.log(this.props.names)
  const { names } = this.props;
  return <div>{names}</div>;
}

如果要console.log类组件的新状态,请使用回调函数作为setState的第二个参数,如下所示:

setState({counter: this.counter + 1}, ()=>console.log(counter))

否则,它会显示之前的状态值。

 类似资料:
  • 问题内容: 我有React表单,其中有一个用于渲染下拉菜单的Component,因为这些选项来自API。但是,我无法访问嵌入式组件的引用。我正在整理我的第一个表格,并试图了解解决此问题的最佳方法。 问题答案: 最好将视为回调属性,并且不再依赖于Object。如果确实使用对象,请避免访问后代组件。您应该将其视为私有访问器,而不应将其视为组件API的一部分。仅将组件实例上公开的方法视为其公共API。

  • 问题内容: 我试图了解何时使用React功能组件和类,并从文档中阅读它们并没有真正详细介绍。当您希望类的特定功能构成组件时,能否给我下面的一些主要例子? 功能组件的功能较弱,但更简单,并且仅使用一个render()方法就类似于类组件。除非您需要仅在类中可用的功能,否则我们建议您改用功能组件。 问题答案: 您仅在以下情况下需要组件: 需要组件 状态 或 需要 生命周期方法 。例如等

  • 3.4.0 对组件反解机制做了全面的升级。新的组件反解基于数据和模板匹配的机制,代替原来的标记机制。 旧的基于标记的组件反解请见老文档 版本:>= 3.4.0 提示:通过 San 进行服务端渲染,一定能通过相同版本的 San 在浏览器端进行反解。 概述 组件初始化时传入 el,其将作为组件根元素,并以此反解析出视图结构。 该特性的意图是:有时我们为了首屏时间,期望初始的视图是直接的 HTML,不由

  • 我很困惑组件和react类之间有什么区别? 什么时候在反应类上使用组件?看起来组件是一个类,createClass创建了一个组件。 https://facebook.github.io/react/docs/top-level-api.html 反应组件 这是使用ES6类定义React组件时的基类。有关如何将ES6类与React一起使用,请参见可重用组件。有关基类实际提供的方法,请参见组件API。

  • 我见过多个使用Typescript的React组件示例: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++组件 当我们不使用道具或国家时,似乎没有一个明确的惯例。 人们将这些类型设置为,,,, ,等等。这是我到目前为止看到的:

  • 我正在使用一个名为React语义ui日期选择器的React模块,我相信它是基于React日期选择器的。不管怎样,这都是一个普通的问题。我的主类组件和日期选择器功能组件位于同一个文件中。日期选择器呈现并工作正常,但我不知道如何在主类组件中访问日期选择器的实际值。 代码的简化版本可以在下面看到,我只是控制台日志记录了几个变量的值。有人能给我一个建议,告诉我从类组件中访问所选日期选择器值的最佳方式吗?