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

2种创建React组件的不同方法

岳枫
2023-03-14
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'))

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

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

    }
}

嗯,我现在很困惑。在React中有什么标准的做事方式吗?

共有1个答案

束新
2023-03-14

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

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

  • “登录”文本(如果用户未登录),或
  • “注销”文本(如果用户已登录)。
// 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组件的示例代码: 他声称这是ES6。 但是后来我看到了另一种创建组件的方法。 嗯,我现在很困惑。是否有任何标准的反应方式? 问题答案: 在React中,您可以创建所谓的有状态和无状态功能组件。无状态组件是不需要维护状态的简单可重用组件。这是一个简短的演示(http://codepen.io/PiotrBerebecki/

  • 本文向大家介绍react 组件传值的三种方法,包括了react 组件传值的三种方法的使用技巧和注意事项,需要的朋友参考一下 整理 react 组件传值 三种方式 父组件向子组件传值(通过props传值) 子组件: 父组件: 父组件向子组件传值(回调函数) 子组件 父组件 兄弟组件传值(子传给父,父再传给另一个子) 子组件1 子组件2 父组件 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望

  • 本文向大家介绍react声明组件有哪几种方法,各有什么不同?相关面试题,主要包含被问及react声明组件有哪几种方法,各有什么不同?时的应答技巧和注意事项,需要的朋友参考一下 1、无状态组件 2、有状态组件 3、高阶组件 4、容器组件 5、回调组件 具体请看这篇文章:https://juejin.im/post/5e041c99518825123e7b0602

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

  • 本文向大家介绍javascript 动态创建表格的2种方法总结,包括了javascript 动态创建表格的2种方法总结的使用技巧和注意事项,需要的朋友参考一下 第一种方法: 第二种方法: 以上2种方法小伙伴们是否都了解了呢,如有更好的方法,也请大家留言说明下,大家共同进步。

  • 您可以使用React从Ajax调用返回的数据创建路由器链接(或其他组件)吗?不使用呈现函数。 背景:我们有一个大型的第三方非React javascript库,它可以从AJAX调用中动态呈现HTML。我们控制输入(即ajax-response),但不控制输出。我想输入链接(一个href),并将它们呈现为React路由器链接。为了包装非React组件,我创建了一个组件,它基本上有两个部分:compo