Reactjs 将组件从有状态转换为无状态(差异)

Reactjs 将组件从有状态转换为无状态(差异),reactjs,Reactjs,我试图找出有状态组件和无状态组件之间的区别 如果我错了,请纠正我: 这是一个有状态的组件: import React from "react"; export class Mycomponent extends React.Component { render() { return ( <div> <p>My Component</p> </div

我试图找出有状态组件和无状态组件之间的区别

如果我错了,请纠正我:

这是一个有状态的组件:

import React from "react";

export class Mycomponent extends React.Component {
    render() {
        return (

            <div>
                <p>My Component</p>
            </div>

        );
    }
}

无状态组件与上述组件有何不同?

反应状态完整组件通常具有类语法并扩展反应组件基类。这使您可以访问react生命周期方法,如render、componentDidMount等

另一方面,一个无状态的函数组件只不过是一个返回jsx的函数。您不在react生命周期中,无法访问组件基类方法

下面是无状态功能组件的一些示例代码

export default function example() {
    return (
        <h1>This is where the jsx goes</h1>
    )
}
我还应该指出,在无状态函数组件中,您可以通过向函数传递一个props参数来访问props,类似这样

export default function example(props) {
    return (
        <h1>{props.person.firstName}</h1>
    )
}

但是在react类中,您只需访问这个.props.就可以获得props。react状态完整组件通常具有类语法并扩展react组件基类。这使您可以访问react生命周期方法,如render、componentDidMount等

另一方面,一个无状态的函数组件只不过是一个返回jsx的函数。您不在react生命周期中,无法访问组件基类方法

下面是无状态功能组件的一些示例代码

export default function example() {
    return (
        <h1>This is where the jsx goes</h1>
    )
}
我还应该指出,在无状态函数组件中,您可以通过向函数传递一个props参数来访问props,类似这样

export default function example(props) {
    return (
        <h1>{props.person.firstName}</h1>
    )
}

但在react类中,您只需访问此.props即可获得道具。无论您现在拥有什么,都是一个类组件:

功能组件可以按字面形式写为函数:

export default () => <h1>Hello World!</h1>;
类组件类似于编写OOP:

import React, { Component } from 'react';

export default class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      error: false,
      loading: true
    }
  }
  componentDidMount() {
    const { data, status } = fetch(apiendpoint); // res.data
    if (status !== 200) {
      this.setState({ error: true });
      this._renderError();
    }
    this.setState({ loading: false });
  }
  _renderError() {
   return <h1>Error!</h1>;
  }
  render() {
    const component = loading ?
      <Loading /> :
      <h1>Hello {this.props.data}</h1>;
      return component;
  }
}

您可以通过构造函数在类组件中创建状态,并且通过使用setState可以在组件级别管理状态。希望这有助于您更好地了解差异

您现在拥有的是一个类组件:

功能组件可以按字面形式写为函数:

export default () => <h1>Hello World!</h1>;
类组件类似于编写OOP:

import React, { Component } from 'react';

export default class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      error: false,
      loading: true
    }
  }
  componentDidMount() {
    const { data, status } = fetch(apiendpoint); // res.data
    if (status !== 200) {
      this.setState({ error: true });
      this._renderError();
    }
    this.setState({ loading: false });
  }
  _renderError() {
   return <h1>Error!</h1>;
  }
  render() {
    const component = loading ?
      <Loading /> :
      <h1>Hello {this.props.data}</h1>;
      return component;
  }
}

您可以通过构造函数在类组件中创建状态,并且通过使用setState可以在组件级别管理状态。希望这有助于您更好地了解差异

为了得出这是一个有状态组件的结论,您考虑了什么?正如我现在看到的,它既不是有状态的,也不是无状态的。据我所知,一个无状态组件只从props获取所有渲染数据。一旦你开始摆弄这个.state,你就得到了一个有状态的组件。可能的重复:你考虑了什么来断定这是一个有状态的组件?正如我现在看到的,它既不是有状态的,也不是无状态的。据我所知,一个无状态组件只从props获取所有渲染数据。一旦你开始摆弄这个.state,你就得到了一个有状态的组件。可能的重复:纯功能组件是实现无状态组件的一种方式。答案第一段的关键词通常是。将无状态组件实现为类ES6或React.createClass是完全有效的。因此,如果您有一个功能组件,它就是一个无状态组件;但是你没有功能组件这一事实并不一定意味着这个组件不是无状态的。我认为你所说的在语义上是完全正确的,但是我认为,我可能是错的,在react land,无状态功能组件被理解为一个函数而不是一个类,因为在类中可以有状态,而在函数中不能有状态。当然,它必须用一个函数来实现,也就是功能形容词。当然,它必须是无状态的,因为您无法访问功能组件中的状态。您可以只说是功能组件,而无状态是隐含的。但是,在类中,您可以决定是否使用状态,这就是决定类组件是有状态的还是无状态的原因。纯功能组件是实现无状态组件的一种方法。答案第一段的关键词通常是。将无状态组件实现为类ES6或React.createClass是完全有效的。因此,如果您有一个功能组件,它就是一个无状态组件;但是,您没有功能组件这一事实并不一定意味着所讨论的组件不是无状态的。我认为从语义上来说,您所说的是完全正确的,但是我认为,我可能是错的,在react land中,无状态的功能组件正在运行 它是一个函数而不是一个类,因为在一个类中你可以有状态,而在一个函数中你不能。当然,它必须用一个函数来实现,也就是功能形容词。当然,它必须是无状态的,因为您无法访问功能组件中的状态。您可以只说是功能组件,而无状态是隐含的。然而,在类中,您可以决定是否使用状态,这就是决定类组件是有状态的还是无状态的原因。