본문 바로가기
FrontEnd/React

반복문

by oncerun 2020. 7. 18.
반응형
 {[1,2,3,4,5,6].map( (v) => {
                    return (
                    <li>{v}</li>
                    );

보통 태그 안에 복잡한 태그들이 섞여있는 경우에는 이차원 배열을 활용할 수 있습니다.

 

       <ul>
                {[
                    [1,2],
                    [2,3],
                    [3,2],
                    [4,2],
                    [5,2],
                    [6,3]
                ].map( (v) => {
                    return (
                    <li>{v[0]} <b>{v[1]}</b></li>
                    );
                })}
            </ul>

 

객체로도 할 수 있습니다.

           <ul>
                {[
                    {
                        num1 : 1,
                        num2 : 2 
                    },
                    {
                        num1 : 3,
                        num2 : 2 
                    },
                    {
                        num1 : 41,
                        num2 : 2 
                    },
                    {
                        num1 : 21,
                        num2 : 2 
                    },
                ].map( (v) => {
                    return (
                    <li key={v.num1 + v.num2}>{v.num1} <b>{v.num2}</b></li>
                    );
                })}
            </ul>

리액트가 key를 보고 같은 컴포넌트인지 아닌지를 이해하기 때문에  key를 정해주어야 합니다.

map의 두 번째 인자는 index입니다. 

index는 고유하기 때문에 key에 넣을 수 있는데 성능 최적화에 문제가 발생하므로 

index를 키값으로 넣어주면 안 됩니다.

만약 요소가 추가만 되는 배열인 경우에는 i를 써도 되긴 합니다.

 

가독성이 떨어지게 된다.   따라서 props를 이용하여 가독성을 높일 수 있다.

      <div>시도 : {this.state.tries.length}</div>
            <ul>
                {this.fruit.map( (v, i) => 
                   <Try  value={v} index={i}/>
                )}
            </ul>
            </>
import React, {Component} from 'react';

class Try extends Component{

    render() {
        return(
            
    
                <li key={this.props.value}>
                 {this.props.value.num1} 
                <b>{this.props.value.num2}</b>
                <div></div>
                <div></div>
                <div></div>
                <div></div>
                  </li>
                
           

        );

    }

}

export default Try;

 

props는 부모가 자식에게 속성을 물려줄 때 사용합니다. 그런데 만약 자식이 자식을 만드는 경우에는 더욱 복잡해지게 됩니다.

이럴 때 사용하는 것이 리덕스, 콘텍스트를 사용합니다.

리액트 자체에 콘텍스트가 존재하며 그러한 콘텍스트의 복잡한 일을 할 경우 사용하는 것이 리덕스입니다.

props를 관리해주는 은행을 생각하시면 됩니다.

 

jsx에서 주석을 처리하기 위해선 {/* */} 주석을 중괄호로 감싸주어야 합니다.

 

리액트에서 push는 중요합니다. 

리액트는 state의 변경에 따라 render을 하는데 arr.push를 할 경우에는  이전 배열과 이후 배열이 true가 되어

렌더링 하지 않습니다  즉 참조가 변경되어야 합니다.

state = {

        result = '',
        value = '',
        answer = getNumbers(),
        tries = [],  //불변성때문에 push안됨
    };

    onSubmitForm = (e) => {
        e.preventDefault();
        if(this.state.value === this.state.answer.join('')){

            this.setState({

                result : '홈런',
                tries : 
                [
                    ...this.state.tries,
                     { try : 
                        this.state.value, 
                        result:'홈런!' },
                ],


            });

 

반응형

'FrontEnd > React' 카테고리의 다른 글

리액트 라이프사이클  (0) 2020.07.22
React Devtools  (0) 2020.07.19
require, import  (0) 2020.07.18
babel preset env , plugins  (0) 2020.07.16
webpack  (0) 2020.07.16

댓글