当前位置: 首页 > 面试题库 >

2种不同的方式来创建React组件

温开畅
2023-03-14
问题内容

我正在关注一个React教程,这是作者提供的用于创建基本React组件的示例代码:

const React = require('react')
const ReactDOM = require('react-dom')

const App = () => {
    return (
        <div className='app-container'>
            <h1>Hello</h1>
        </div>
    )
}

ReactDOM.render(<App />, document.getElementById('app'))

他声称这是ES6。

但是后来我看到了另一种创建组件的方法。

class App extends React.Component {
    render(){
        return <h1>Hello</h1>;

    }
}

嗯,我现在很困惑。是否有任何标准的反应方式?


问题答案:

在React中,您可以创建所谓的有状态和无状态功能组件。无状态组件是不需要维护状态的简单可重用组件。这是一个简短的演示(http://codepen.io/PiotrBerebecki/pen/yaoOKv),向您展示如何创建它们以及它们如何访问从父级传递的道具(有状态组件)。

一个简单的例子可能是AppFacebook.com上的理论状态组件。它可以保持状态以跟踪用户是登录还是注销。然后,在其render()方法中,它将显示一个LoginLogout无状态按钮组件,将其传递给当前状态。然后,LoginLogout无状态组件将显示:

  • 如果用户未登录,则显示“登录”文本,或者
  • 如果用户已登录,则为“注销”文本。

您可以在此处了解有关有状态与无状态组件的更多信息:有状态和无状态之间的ReactJS区别,以及此处[React.createClass与ES6箭头功能

// Stateful component
class FacelookApp extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isLoggedIn: false
    };
  }

  receiveClick() {
    this.setState({
      isLoggedIn: !this.state.isLoggedIn
    });
  }

  render() {
    return (
      <div>
        <h4>Welcome, I'm a stateful parent called Facelook App</h4>
        <p>I maintain state to monitor if my awesome user logged 
          in. Are you logged in?<br />
          <b>{String(this.state.isLoggedIn)}</b>
        </p><br />

        <p>Hi, we are three stateless (dumb) LoginLogout buttons 
          generated using different ES6 syntax but having the same
          functionality. We don't maintain state. We will tell 
          our parent if the user clicks on us. What we render is 
          decided by the value of the prop sent to us by our parent.
        </p>

        <LoginLogout1 handleClick={this.receiveClick.bind(this)} 
                isLoggedIn={this.state.isLoggedIn}/>

        <LoginLogout2 handleClick={this.receiveClick.bind(this)} 
                isLoggedIn={this.state.isLoggedIn}/>

        <LoginLogout3 handleClick={this.receiveClick.bind(this)} 
                isLoggedIn={this.state.isLoggedIn}/>
      </div>
    );
  }
}


// Stateless functional components
// created in 3 equally valid ways
const LoginLogout1 = (props) => {
  return (
    <div>
      <button onClick={() => props.handleClick()}>
        LoginLogout v1 --- {props.isLoggedIn ? 'Log Out' : 'Log In'}
      </button>
    </div>
  );
};

// or
const LoginLogout2 = ({handleClick, isLoggedIn}) => (
    <div>
      <button onClick={() => handleClick()}>
        LoginLogout v2 --- {isLoggedIn ? 'Log Out' : 'Log In'}
      </button>
    </div>
);

// or
const LoginLogout3 = ({handleClick, isLoggedIn}) => {
  return (
    <div>
      <button onClick={() => handleClick()}>
        LoginLogout v3 --- {isLoggedIn ? 'Log Out' : 'Log In'}
      </button>
    </div>
  );
};



ReactDOM.render(
  <FacelookApp />,
  document.getElementById('app')
);


 类似资料:
  • 但后来我看到了另一种创建组件的方法。 嗯,我现在很困惑。在React中有什么标准的做事方式吗?

  • 本文向大家介绍react有几种构建组件的方式?可以写出来吗?相关面试题,主要包含被问及react有几种构建组件的方式?可以写出来吗?时的应答技巧和注意事项,需要的朋友参考一下 1.无状态函数式组件 function HelloComponent(props, /* context */) { return <div>Hello {props.name}</div> } ReactDOM.rende

  • 本文向大家介绍JS创建类和对象的两种不同方式,包括了JS创建类和对象的两种不同方式的使用技巧和注意事项,需要的朋友参考一下 在JavaScript中, 当你定义了一个新的函数, 你实际上声明了一个新的类, 而这个函数本身就相当于类的构造函数。下面的代码向你展示了两种不同的方式来创建一个新的Person类, 而Person.prototype的定义也紧跟在函数定义之后。 当你通过函数的方式声明了一个

  • 本文向大家介绍Java创建数组的几种方式总结,包括了Java创建数组的几种方式总结的使用技巧和注意事项,需要的朋友参考一下 1、一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 附:推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不是type类型。建议不要使用第二种方式 下面是典型的声明数组的方式: 注:J

  • 主要内容:Servlet、GenericServlet 、HttpServlet 的关系,Servlet 接口,GenericServlet 抽象类,HttpServlet 抽象类,总结在 Servlet 中,一个动态网页对应一个 Servlet 类,我们可以通过 web.xml 配置文件将 URL 路径和 Servlet 类对应起来。访问一个动态网页的过程,实际上是将对应的 Servlet 类加载、实例化并调用相关方法的过程;网页上显示的内容,就是通过 Servlet 类中的某些方法向浏览器输

  • 本文向大家介绍创建线程有几种不同的方式?你喜欢哪一种?为什么?相关面试题,主要包含被问及创建线程有几种不同的方式?你喜欢哪一种?为什么?时的应答技巧和注意事项,需要的朋友参考一下 考察点:JAVA线程 有三种方式可以用来创建线程: 继承Thread类 实现Runnable接口 应用程序可以使用Executor框架来创建线程池 实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类