gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 05:07:15 25 4
gpt4 key购买 nike

我正在学习 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 中有任何标准的做事方式吗?

最佳答案

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

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

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

您可以在此处了解有关有状态与无状态组件的更多信息:ReactJS difference between stateful and stateless在这里 React.createClass vs. ES6 arrow function

// 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')
);

关于javascript - 创建 React 组件的 2 种不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39766694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com