Example of different ways to write stateless functional components in React
A Pen by Vlad Bezden on CodePen.
| <div id="app" /> |
| const languages = [ | |
| 'JavaScript', | |
| 'Python', | |
| 'Java', | |
| 'Elm', | |
| 'TypeScript', | |
| 'C#', | |
| 'F#' | |
| ] | |
| // one liner | |
| const Language = ({language}) => <li>{language}</li> | |
| Language.propTypes = { | |
| message: React.PropTypes.string.isRequired | |
| } | |
| /** | |
| * If there are more than one line. | |
| * Please notice that curly brackets are optional here, | |
| * however I uses them for readability | |
| */ | |
| const LanguagesList = ({languages}) => ( | |
| <ul> | |
| {languages.map(language => <Language language={language} />)} | |
| </ul> | |
| ) | |
| LanguagesList.PropTypes = { | |
| languages: React.PropTypes.array.isRequired | |
| } | |
| /** | |
| * This syntax is used if there are more work is besided just JSX presentation | |
| * For instance some data manipulations needs to be done. | |
| * Please notice that curly brackets after return are required, | |
| * Otherwise return will return nothing (undefined) | |
| */ | |
| const LanguageSection = ({header, languages}) => { | |
| // do some work | |
| const formattedLanguages = languages.map(language => language.toUpperCase()) | |
| return ( | |
| <fieldset> | |
| <legend>{header}</legend> | |
| <LanguagesList languages={formattedLanguages} /> | |
| </fieldset> | |
| ) | |
| } | |
| LanguageSection.PropTypes = { | |
| header: React.PropTypes.string.isRequired, | |
| languages: React.PropTypes.array.isRequired | |
| } | |
| ReactDOM.render( | |
| <LanguageSection | |
| header="Languages" | |
| languages={languages} />, | |
| document.getElementById('app') | |
| ) |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.min.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.min.js"></script> |
Example of different ways to write stateless functional components in React
A Pen by Vlad Bezden on CodePen.