reactjs - 如何将类组件重写为 React Functional?

标签 reactjs react-hooks react-functional-component

我是 React 的新手,正在学习基础知识,但现在我需要重写一个类组件才能使用 React Hooks。所以我想我需要将它重写为功能组件。

我已经尝试过更改一些东西,但最后一切都坏了,我会收到“props not defined”错误。

这是代码:

class Main extends React.Component {
  render() {
    let close = (
      <div
        className="close"
        onClick={() => {
          this.props.onCloseArticle()
        }}
      ></div>
    )

    return (
      <div
        ref={this.props.setWrapperRef}
        id="main"
        style={this.props.timeout ? { display: 'flex' } : { display: 'none' }}
      >
        <article
          id="vision"
          className={`${this.props.article === 'vision' ? 'active' : ''} ${
            this.props.articleTimeout ? 'timeout' : ''
          }`}
          style={{ display: 'none' }}
        >
          <h2 className="major">Vision</h2>
          <span className="image main">
            <img src={pic01} alt="" />
          </span>
          <p>
            Adipiscing magna sed dolor elit. Praesent eleifend dignissim arcu,
            at eleifend sapien imperdiet ac. Aliquam erat volutpat. Praesent
            urna nisi, fringila lorem et vehicula lacinia quam. Integer
            sollicitudin mauris nec lorem luctus ultrices.
          </p>
          <p>
            Nullam et orci eu lorem consequat tincidunt vivamus et sagittis
            libero. Mauris aliquet magna magna sed nunc rhoncus pharetra.
            Pellentesque condimentum sem. In efficitur ligula tate urna.
            Maecenas laoreet massa vel lacinia pellentesque lorem ipsum dolor.
            Nullam et orci eu lorem consequat tincidunt. Vivamus et sagittis
            libero. Mauris aliquet magna magna sed nunc rhoncus amet feugiat
            tempus.
          </p>
          {close}
        </article>
      </div>
    )
  }
}

Main.propTypes = {
  route: PropTypes.object,
  article: PropTypes.string,
  articleTimeout: PropTypes.bool,
  onCloseArticle: PropTypes.func,
  timeout: PropTypes.bool,
  setWrapperRef: PropTypes.func.isRequired,
}

export default Main

我所做的是将 class main 更改为 const Main = () => {,删除 render() 但在那之后我我很困惑..

最佳答案

这应该可以完成工作

  1. const替换class
  2. 移除类组件中使用的render生命周期方法
  3. 在函数的参数中添加props
  4. 删除所有this
const Main = (props) => {
    let close = (
      <div
        className="close"
        onClick={() => {
          props.onCloseArticle()
        }}
      ></div>
    )

    return (
      <div
        ref={props.setWrapperRef}
        id="main"
        style={props.timeout ? { display: 'flex' } : { display: 'none' }}
      >
        <article
          id="vision"
          className={`${props.article === 'vision' ? 'active' : ''} ${
            props.articleTimeout ? 'timeout' : ''
          }`}
          style={{ display: 'none' }}
        >
          <h2 className="major">Vision</h2>
          <span className="image main">
            <img src={pic01} alt="" />
          </span>
          <p>
            Adipiscing magna sed dolor elit. Praesent eleifend dignissim arcu,
            at eleifend sapien imperdiet ac. Aliquam erat volutpat. Praesent
            urna nisi, fringila lorem et vehicula lacinia quam. Integer
            sollicitudin mauris nec lorem luctus ultrices.
          </p>
          <p>
            Nullam et orci eu lorem consequat tincidunt vivamus et sagittis
            libero. Mauris aliquet magna magna sed nunc rhoncus pharetra.
            Pellentesque condimentum sem. In efficitur ligula tate urna.
            Maecenas laoreet massa vel lacinia pellentesque lorem ipsum dolor.
            Nullam et orci eu lorem consequat tincidunt. Vivamus et sagittis
            libero. Mauris aliquet magna magna sed nunc rhoncus amet feugiat
            tempus.
          </p>
          {close}
        </article>
      </div>
    )
}

关于reactjs - 如何将类组件重写为 React Functional?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68000303/

相关文章:

javascript - React 处理多个元素外部的点击

javascript - 未捕获的 TypeError : path. split 不是 react 中的函数

reactjs - 在 Antd Table React 中单独处理分页排序和过滤

react-native - 从功能组件 React Native 调用功能

javascript - 我可以在 React 功能组件中添加异步功能吗

reactjs - 类型错误扩展不是样式组件中的函数

javascript - Echart以特定方式配置饼图例

reactjs - 为什么命名组件的行为与匿名组件不同

javascript - react 大日历,点击事件时渲染组件

javascript - 在 useEffect 中 react 永无止境的循环