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

home2 게시판 React 게시판 useEffect 질문드립니다.

useEffect 질문드립니다.

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

    방기남
    참가자

    안녕하세요.

    그리드에서 행을 선택하면 선택한 행의 데이터를 화면에 보여주려고 합니다.

    그래서 다음과 같이 했습니다.

    1. 그리드에서 행 선택
    2. 이벤트 핸들러에서 setSelectedRow(data); 처리

    3. setSelect.... 해줬기 때문에 useEffect 에서 랜더링 기대 (데이터가 바꼈기 때문에)

    4. useEffect 는 랜더링 후에 동작하므로 좌절..

     

    이렇게 했는데, 문제는 화면에 표시가 안됩니다.

    랜더링 이후에 useEffect 가 수행되어서 그런거 같습니다.

    어떻게 해결 할 수 있을까요?

    그리드에서 항목을 선택하면 화면에 표시하고 싶습니다.

    대략적인 소스는 아래와 같습니다.

    import { ReactElement, useEffect, useState } from "react";
    import Header from 'components/Header';
    import Title from 'components/Title';
    import styles from './User.module.css';
    import Menu from './User.Menu';
    import List from './User.List';
    import Inspector from './User.Inspector';
    
    import 'devextreme/dist/css/dx.common.css';
    import 'devextreme/dist/css/dx.light.css';
    
    import {
        MENU_SYSTEM_USER
    } from 'config/config';
    
    const User = (): ReactElement => {
        const [action, setAction] = useState('LST');
        const [visible, setVisible] = useState(false);
        const [selectedRow, setSelectedRow] = useState();
    
        const addButton = (event: any): void => {
            event.preventDefault(); 
            setAction('ADD');
            setVisible(!visible);
        };
        
        const edtButton = (event: any): void => {
            event.preventDefault(); 
            setAction('EDT');
            setVisible(!visible);
        };
        
        const delButton = (event: any): void => {
            event.preventDefault(); 
            setAction('DEL');
            setVisible(false);
        };
    
        const rowSelected = (data: any): void => {
            // console.log(data); 제대로 나옴
            setSelectedRow(data); // 데이터가 바꼈으므로 화면에 나올거라 기대
        };
        
        useEffect(() => {
            console.log(selectedRow); // 데이터 제대로 표시됨
            // 혹시 여기에다가 setSelectedRow 해줘야 하나요???
        }, [selectedRow]);
    
        return (
            <div>
                <Header />
                <Title title={ MENU_SYSTEM_USER } />
                <div className={ styles.workArea }>
                    <Menu
                        addButton={ addButton }
                        edtButton={ edtButton }
                        delButton={ delButton }                    
                    />
                    {
                        visible === true ? <List visible={ true } rowSelected = { rowSelected }/> : <List visible={ true } rowSelected = { rowSelected }/>
                    }
                    {
                        visible === true ? <Inspector selectedRow = { selectedRow } /> : <Inspector />
                        // 여기에 데이터가 전달이 안되고 있음.
                    }
                </div>
            </div>
        );
    }
    
    export default User;
    #7184

    codingapple
    키 마스터

    selectedRow가 html내에 중괄호로 잘 꽂혀있나요? 그렇다면 setSelectedRow()로 잘 바꾸면 그 html은 재렌더링알아서 잘 됩니다

    - selectedRow가 html에 잘 꽂혀있는지

    - 그게 혹시 props로 전송중이면 잘 전송되고 있는지 전송후에 잘꽂았는지

    - setSelectedRow()를 잘 작동시켰는지

    를 확인해보아야합니다 useEffect는 굳이 필요는 없을듯요

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

About

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

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

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