* header changed to heading tag * fix: Exercise about heading tags <h1> ... <h6>, accidentally refers to header tags * fix: changed header to heading on pages affected * Update curriculum/challenges/_meta/applied-visual-design/meta.json Co-authored-by: Ilenia <nethleen@gmail.com> * Update curriculum/challenges/english/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md Co-authored-by: Shaun Hamilton <shauhami020@gmail.com> * Update curriculum/challenges/english/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md Co-authored-by: Shaun Hamilton <shauhami020@gmail.com> * Update curriculum/challenges/english/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md Co-authored-by: Shaun Hamilton <shauhami020@gmail.com> * Update curriculum/challenges/english/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md Co-authored-by: Shaun Hamilton <shauhami020@gmail.com> * Update curriculum/challenges/english/01-responsive-web-design/applied-accessibility/use-headings-to-show-hierarchical-relationships-of-content.md Co-authored-by: Shaun Hamilton <shauhami020@gmail.com> * Update curriculum/challenges/english/01-responsive-web-design/basic-html-cat-photo-app/part-002.md Co-authored-by: Shaun Hamilton <shauhami020@gmail.com> * Update curriculum/challenges/english/01-responsive-web-design/applied-visual-design/adjust-the-size-of-a-header-versus-a-paragraph-tag.md Co-authored-by: gikf <60067306+gikf@users.noreply.github.com> * Update curriculum/challenges/english/01-responsive-web-design/applied-visual-design/adjust-the-size-of-a-header-versus-a-paragraph-tag.md Co-authored-by: gikf <60067306+gikf@users.noreply.github.com> * file renamed * dashed-name changed for all languages * made changes in all the challenges * file title changed * added cypress test * cypress test added * Update cypress/integration/learn/redirects/heading-challenge.js Co-authored-by: Kristofer Koishigawa <scissorsneedfoodtoo@gmail.com> Co-authored-by: Ilenia <nethleen@gmail.com> Co-authored-by: Shaun Hamilton <shauhami020@gmail.com> Co-authored-by: gikf <60067306+gikf@users.noreply.github.com> Co-authored-by: Kristofer Koishigawa <scissorsneedfoodtoo@gmail.com>
		
			
				
	
	
		
			114 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| id: 5a24c314108439a4d4036171
 | |
| title: Render State in the User Interface
 | |
| challengeType: 6
 | |
| forumTopicId: 301409
 | |
| dashedName: render-state-in-the-user-interface
 | |
| ---
 | |
| 
 | |
| # --description--
 | |
| 
 | |
| Once you define a component's initial state, you can display any part of it in the UI that is rendered. If a component is stateful, it will always have access to the data in `state` in its `render()` method. You can access the data with `this.state`.
 | |
| 
 | |
| If you want to access a state value within the `return` of the render method, you have to enclose the value in curly braces.
 | |
| 
 | |
| `state` is one of the most powerful features of components in React. It allows you to track important data in your app and render a UI in response to changes in this data. If your data changes, your UI will change. React uses what is called a virtual DOM, to keep track of changes behind the scenes. When state data updates, it triggers a re-render of the components using that data - including child components that received the data as a prop. React updates the actual DOM, but only where necessary. This means you don't have to worry about changing the DOM. You simply declare what the UI should look like.
 | |
| 
 | |
| Note that if you make a component stateful, no other components are aware of its `state`. Its `state` is completely encapsulated, or local to that component, unless you pass state data to a child component as `props`. This notion of encapsulated `state` is very important because it allows you to write certain logic, then have that logic contained and isolated in one place in your code.
 | |
| 
 | |
| # --instructions--
 | |
| 
 | |
| In the code editor, `MyComponent` is already stateful. Define an `h1` tag in the component's render method which renders the value of `name` from the component's state.
 | |
| 
 | |
| **Note:** The `h1` should only render the value from `state` and nothing else. In JSX, any code you write with curly braces `{ }` will be treated as JavaScript. So to access the value from `state` just enclose the reference in curly braces.
 | |
| 
 | |
| # --hints--
 | |
| 
 | |
| `MyComponent` should have a key `name` with value `freeCodeCamp` stored in its state.
 | |
| 
 | |
| ```js
 | |
| assert(
 | |
|   Enzyme.mount(React.createElement(MyComponent)).state('name') ===
 | |
|     'freeCodeCamp'
 | |
| );
 | |
| ```
 | |
| 
 | |
| `MyComponent` should render an `h1` heading element enclosed in a single `div`.
 | |
| 
 | |
| ```js
 | |
| assert(
 | |
|   /<div><h1>.*<\/h1><\/div>/.test(
 | |
|     Enzyme.mount(React.createElement(MyComponent)).html()
 | |
|   )
 | |
| );
 | |
| ```
 | |
| 
 | |
| The rendered `h1` heading element should only contain text rendered from the component's state.
 | |
| 
 | |
| ```js
 | |
| async () => {
 | |
|   const waitForIt = (fn) =>
 | |
|     new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250));
 | |
|   const mockedComponent = Enzyme.mount(React.createElement(MyComponent));
 | |
|   const first = () => {
 | |
|     mockedComponent.setState({ name: 'TestName' });
 | |
|     return waitForIt(() => mockedComponent.html());
 | |
|   };
 | |
|   const firstValue = await first();
 | |
|   const getValue = firstValue.replace(/\s/g, '');
 | |
|   assert(getValue === '<div><h1>TestName</h1></div>');
 | |
| };
 | |
| ```
 | |
| 
 | |
| # --seed--
 | |
| 
 | |
| ## --after-user-code--
 | |
| 
 | |
| ```jsx
 | |
| ReactDOM.render(<MyComponent />, document.getElementById('root'))
 | |
| ```
 | |
| 
 | |
| ## --seed-contents--
 | |
| 
 | |
| ```jsx
 | |
| class MyComponent extends React.Component {
 | |
|   constructor(props) {
 | |
|     super(props);
 | |
|     this.state = {
 | |
|       name: 'freeCodeCamp'
 | |
|     }
 | |
|   }
 | |
|   render() {
 | |
|     return (
 | |
|       <div>
 | |
|         { /* Change code below this line */ }
 | |
| 
 | |
|         { /* Change code above this line */ }
 | |
|       </div>
 | |
|     );
 | |
|   }
 | |
| };
 | |
| ```
 | |
| 
 | |
| # --solutions--
 | |
| 
 | |
| ```jsx
 | |
| class MyComponent extends React.Component {
 | |
|   constructor(props) {
 | |
|     super(props);
 | |
|     this.state = {
 | |
|       name: 'freeCodeCamp'
 | |
|     }
 | |
|   }
 | |
|   render() {
 | |
|     return (
 | |
|       <div>
 | |
|         { /* Change code below this line */ }
 | |
|         <h1>{this.state.name}</h1>
 | |
|         { /* Change code above this line */ }
 | |
|       </div>
 | |
|     );
 | |
|   }
 | |
| };
 | |
| ```
 |