* feat(tools): add seed/solution restore script * chore(curriculum): remove empty sections' markers * chore(curriculum): add seed + solution to Chinese * chore: remove old formatter * fix: update getChallenges parse translated challenges separately, without reference to the source * chore(curriculum): add dashedName to English * chore(curriculum): add dashedName to Chinese * refactor: remove unused challenge property 'name' * fix: relax dashedName requirement * fix: stray tag Remove stray `pre` tag from challenge file. Signed-off-by: nhcarrigan <nhcarrigan@gmail.com> Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| id: 5a24c314108439a4d4036168
 | |
| title: Write a React Component from Scratch
 | |
| challengeType: 6
 | |
| forumTopicId: 301424
 | |
| dashedName: write-a-react-component-from-scratch
 | |
| ---
 | |
| 
 | |
| # --description--
 | |
| 
 | |
| Now that you've learned the basics of JSX and React components, it's time to write a component on your own. React components are the core building blocks of React applications so it's important to become very familiar with writing them. Remember, a typical React component is an ES6 `class` which extends `React.Component`. It has a render method that returns HTML (from JSX) or `null`. This is the basic form of a React component. Once you understand this well, you will be prepared to start building more complex React projects.
 | |
| 
 | |
| # --instructions--
 | |
| 
 | |
| Define a class `MyComponent` that extends `React.Component`. Its render method should return a `div` that contains an `h1` tag with the text: `My First React Component!` in it. Use this text exactly, the case and punctuation matter. Make sure to call the constructor for your component, too.
 | |
| 
 | |
| Render this component to the DOM using `ReactDOM.render()`. There is a `div` with `id='challenge-node'` available for you to use.
 | |
| 
 | |
| # --hints--
 | |
| 
 | |
| There should be a React component called `MyComponent`.
 | |
| 
 | |
| ```js
 | |
| (getUserInput) =>
 | |
|   assert(
 | |
|     __helpers
 | |
|       .removeWhiteSpace(getUserInput('index'))
 | |
|       .includes('classMyComponentextendsReact.Component{')
 | |
|   );
 | |
| ```
 | |
| 
 | |
| `MyComponent` should contain an `h1` tag with text `My First React Component!` Case and punctuation matter.
 | |
| 
 | |
| ```js
 | |
| assert(
 | |
|   (function () {
 | |
|     const mockedComponent = Enzyme.mount(React.createElement(MyComponent));
 | |
|     return mockedComponent.find('h1').text() === 'My First React Component!';
 | |
|   })()
 | |
| );
 | |
| ```
 | |
| 
 | |
| `MyComponent` should render to the DOM.
 | |
| 
 | |
| ```js
 | |
| assert(document.getElementById('challenge-node').childNodes.length === 1);
 | |
| ```
 | |
| 
 | |
| `MyComponent` should have a constructor calling `super` with `props`.
 | |
| 
 | |
| ```js
 | |
| assert(
 | |
|   MyComponent.toString().includes('MyComponent(props)') &&
 | |
|     MyComponent.toString().includes('_super.call(this, props)')
 | |
| );
 | |
| ```
 | |
| 
 | |
| # --seed--
 | |
| 
 | |
| ## --seed-contents--
 | |
| 
 | |
| ```jsx
 | |
| // Change code below this line
 | |
| ```
 | |
| 
 | |
| # --solutions--
 | |
| 
 | |
| ```jsx
 | |
| // Change code below this line
 | |
| class MyComponent extends React.Component {
 | |
|   constructor(props) {
 | |
|     super(props);
 | |
|   }
 | |
|   render() {
 | |
|     return (
 | |
|       <div>
 | |
|         <h1>My First React Component!</h1>
 | |
|       </div>
 | |
|     );
 | |
|   }
 | |
| };
 | |
| 
 | |
| ReactDOM.render(<MyComponent />, document.getElementById('challenge-node'));
 | |
| ```
 |