76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
title: Use Array.map() to Dynamically Render Elements
 | 
						|
---
 | 
						|
## Use Array.map() to Dynamically Render Elements
 | 
						|
 | 
						|
## Hint 1:
 | 
						|
 | 
						|
Define the two states as a JavaScript ```object```.
 | 
						|
 | 
						|
```javascript
 | 
						|
{object: state, object: state}
 | 
						|
```
 | 
						|
 | 
						|
## Hint 2:
 | 
						|
 | 
						|
You need ```.map()``` to generate a line for every object in the array.
 | 
						|
 | 
						|
```javascript
 | 
						|
this.state.toDoList.map(i => <li>{i}</li>);
 | 
						|
```
 | 
						|
 | 
						|
## Solution:
 | 
						|
 | 
						|
Once you add the map function, you will notice that it will generate a ```<li>``` for every item you put in the list.
 | 
						|
 | 
						|
```jsx
 | 
						|
const textAreaStyles = {
 | 
						|
  width: 235,
 | 
						|
  margin: 5
 | 
						|
};
 | 
						|
 | 
						|
class MyToDoList extends React.Component {
 | 
						|
  constructor(props) {
 | 
						|
    super(props);
 | 
						|
    // change code below this line
 | 
						|
    this.state = {
 | 
						|
      userInput: '',
 | 
						|
      toDoList: []
 | 
						|
    }
 | 
						|
    // change code above this line
 | 
						|
    this.handleSubmit = this.handleSubmit.bind(this);
 | 
						|
    this.handleChange = this.handleChange.bind(this);
 | 
						|
  }
 | 
						|
  handleSubmit() {
 | 
						|
    const itemsArray = this.state.userInput.split(',');
 | 
						|
    this.setState({
 | 
						|
      toDoList: itemsArray
 | 
						|
    });
 | 
						|
  }
 | 
						|
  handleChange(e) {
 | 
						|
    this.setState({
 | 
						|
      userInput: e.target.value
 | 
						|
    });
 | 
						|
  }
 | 
						|
  render() {
 | 
						|
    const items = this.state.toDoList.map(i => <li>{i}</li>); // change code here
 | 
						|
    return (
 | 
						|
      <div>
 | 
						|
        <textarea
 | 
						|
          onChange={this.handleChange}
 | 
						|
          value={this.state.userInput}
 | 
						|
          style={textAreaStyles}
 | 
						|
          placeholder="Separate Items With Commas" /><br />
 | 
						|
        <button onClick={this.handleSubmit}>Create List</button>
 | 
						|
        <h1>My "To Do" List:</h1>
 | 
						|
        <ul>
 | 
						|
          {items}
 | 
						|
        </ul>
 | 
						|
      </div>
 | 
						|
    );
 | 
						|
  }
 | 
						|
};
 | 
						|
```
 | 
						|
 | 
						|
<!-- The article goes here, in GitHub-flavored Markdown. Feel free to add YouTube videos, images, and CodePen/JSBin embeds  -->
 |