• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 React 게시판 리엑트에서 정렬(sort)

리엑트에서 정렬(sort)

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 글쓴이
  • #22068

    손민빈
    참가자

    react에서 sort를 통해 정렬 기능을 추가하려고 하고 있습니다.

    낮은가격순으로 배열을 바꾸고 변수 template 에 넣어서 append를 통해 넣을려고 했는데, 웹에는 태그 써있는 그대로 나오더라구요.

    어떻게 해야 할까요?

     

    var bean = [
        { id: 0, title: 'Bean_A', content: 'Body and Flavor, 200g', price: 11000},
        { id: 1, title: 'Bean_B', content: 'Acidity and Flavor, 200g', price: 12000 },
        { id: 2, title: 'Bean_C', content: 'Decaf, 200ga', price: 13000}
    ];

    <div className="text-left">
                        <Form.Select size="sm" id="option" onChange={(e)=>{
                            var selectedSort = e.target.value;
                            console.log(selectedSort)

                            if (selectedSort == '낮은가격순') {

                                document.querySelector('.bean-group').innerHTML='';
                               
                                props.bean.sort(function(a,b){
                                    return a.price - b.price;
                                })

                               
                                    props.bean.map((a,i)=>{
                                       
                                            var template = `
                                            <div className="col-md-4">
                                                <img src=${require('./img/bean'+i+'.png').default} onClick=${() => { history.push('/detail/bean/' + props.bean[i].id) }}></img>
                                                <h5>${props.bean[i].title}</h5>
                                                <p>${props.bean[i].content}</p>
                                                <p>${props.bean[i].price}</p>
                                            </div>
                                            `;
                                            document.querySelector('.bean-group').append(template);
                                       
                                    })
                            }
                        }}>
                            <option value="원래">정렬</option>
                            <option value="낮은가격순">낮은가격순</option>
                            <option value="높은가격순">높은가격순</option>
                        </Form.Select>
                    </div>
                   
                    <div className="bean-group row">
                        {
                            props.bean.map((a, i) => {
                                return (
                                    <div className="col-md-4">
                                        { history.push('/detail/bean/' + props.bean[i].id) }} width="100%"></img>
                                        <h5>{props.bean[i].title}</h5>
                                        <p>{props.bean[i].content}</p>
                                        <p>{props.bean[i].price}</p>
                                    </div>
                                );
                            })
                        }
                    </div>

    #22087

    codingapple
    키 마스터

    props는 변경하면 안됩니다

    state를 정렬하면 됩니다 state변경함수쓰시면 됩니다 

    #22099

    손민빈
    참가자

    props를 변경하면 안된다고 하셔서 props로 받은 배열을 state에 넣었습니다.

    그러고 sort를 통해 배열을 재배치했는데, bean-group(class명)에 데이터바인딩을 해야하는데 어떻게 해야할지 잘 모르겠습니다.

    조금만 구체적으로 말씀 부탁드립니다!

    틀린부분도 있으면 말씀 부탁드리겠습니다.

     

    let [bean, setBean] = useState(props.bean);

     

    <Form.Select size="sm" id="option" onChange={(e)=>{
                            var selectedSort = e.target.value;
                            console.log(selectedSort)

                            if (selectedSort == '낮은가격순') {

                                document.querySelector('.bean-group').innerHTML='';
                               
                                bean.sort(function(a,b){
                                    return b.price - a.price;
                                })
                                    bean.map((a,i)=>{
                                        return(
                                            <div className="col-md-4">
                                                { history.push('/detail/bean/' + props.bean[i].id) }}></img>
                                                <h5>{props.bean[i].title}</h5>
                                                <p>{props.bean[i].content}</p>
                                                <p>{props.bean[i].price}</p>
                                            </div>
                                        );
                                    });
                                ;
                            }
                        }}>
                            <option value="원래">정렬</option>
                            <option value="낮은가격순">낮은가격순</option>
                            <option value="높은가격순">높은가격순</option>
                        </Form.Select>

     

    <div className="bean-group row">
                        {
                            props.bean.map((a, i) => {
                                return (
                                    <div className="col-md-4">
                                        { history.push('/detail/bean/' + props.bean[i].id) }} width="100%"></img>
                                        <h5>{props.bean[i].title}</h5>
                                        <p>{props.bean[i].content}</p>
                                        <p>{props.bean[i].price}</p>
                                    </div>
                                );
                            })
                        }
                    </div>

    #22112

    codingapple
    키 마스터

    보통 props는 state로 담아서 쓰진 않습니다

    정렬버튼을 누르면 부모가 가진 bean이라는 state를 정렬하면 됩니다 

     

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠