【问题标题】:How to transform a Class Component to a Function Stateless Component?如何将类组件转换为函数无状态组件?
【发布时间】:2019-10-25 21:13:38
【问题描述】:

我正在尝试将类组件转换为函数组件。但这对我来说有点困难。你可以帮帮我吗?

我试过这样做,但没有成功:

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import MovieCardsList from './MovieCardsList';

function (
  props.profiles
  props.movies
  props.users
) {
 return (
      <div>
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">ReactND - Coding Practice</h1>
        </header>
        <h1>How Popular is Your Favorite Movie?</h1>
        <MovieCardsList profiles={profiles} movies={movies} users={users} />
      </div>
    ); 
  }

export default App;

这里是部分代码:

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import MovieCardsList from './MovieCardsList';

class App extends Component {
  render() {
    return (
      <div>
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">ReactND - Coding Practice</h1>
        </header>
        <h1>How Popular is Your Favorite Movie?</h1>
        <MovieCardsList profiles={profiles} movies={movies} users={users} />
      </div>
    );
  }
}

export default App;

我接近解决方案了吗?任何帮助,我很感激。提前致谢。

【问题讨论】:

  • 不需要给函数命名吗?函数 App(){...}
  • @skyboyer,也许它过于简单化了。我会试试你的建议。

标签: javascript reactjs ecmascript-6 jsx


【解决方案1】:

改动很小:

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import MovieCardsList from './MovieCardsList';

function App(props) {
   return (
      <div>
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">ReactND - Coding Practice</h1>
        </header>
        <h1>How Popular is Your Favorite Movie?</h1>
        <MovieCardsList profiles={props.profiles} movies={props.movies} users={props.users} />
      </div>
    ); 
  }

export default App;

您还可以使用 {...props} 对象扩展将它们设置在 MovieCardsList 或对象解构 ({ profiles, movies, users }) 以替换 (props)。我个人会怎么做:

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import MovieCardsList from './MovieCardsList';

export default ({ profiles, movies, users }) => (
  <div>
    <header className="App-header">
      <img src={logo} className="App-logo" alt="logo" />
      <h1 className="App-title">ReactND - Coding Practice</h1>
    </header>
    <h1>How Popular is Your Favorite Movie?</h1>
    <MovieCardsList profiles={profiles} movies={movies} users={users} />
  </div>
);

【讨论】:

  • 迪兰,我用过第一个。它奏效了。谢谢。
  • 没问题!永远记住基础知识。我看到的错误是函数定义(命名你的函数并正确定义它的参数)。祝你好运!
  • 我是开发世界的新手。伙计们,我在这里有很多东西要向你们学习。问候。
  • 欢迎您!希望你喜欢。它可以是令人兴奋/有益的部分,也可以是令人沮丧的部分。
【解决方案2】:

要么接受 props 作为参数:

function App = (props) => {
    cosnt {profiles, movies, users} = props
    return <div/>
}

或立即解构它们

function App = ({profiles, movies, users}) => {
    return <div/>
}

完整代码:

import React from 'react';
import logo from './logo.svg';
import './App.css';
import MovieCardsList from './MovieCardsList';

function App = ({profiles, movies, users}) => {
    return (
      <div>
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">ReactND - Coding Practice</h1>
        </header>
        <h1>How Popular is Your Favorite Movie?</h1>
        <MovieCardsList profiles={profiles} movies={movies} users={users} />
      </div>
    );
}

导出默认应用;

【讨论】:

    猜你喜欢
    • 2017-10-05
    • 2018-01-22
    • 2017-06-08
    • 2020-02-01
    • 2021-12-16
    • 2020-12-12
    • 2021-11-24
    相关资源
    最近更新 更多