inflearn logo
강의

Course

Instructor

Creating NodeBird SNS with React

질문입니다!

299

leejg

8 asked

0

안녕하세요 제로초님. 수강 중인 강의 내용과는 별개로 질문 좀 드려도 괜찮을까요?

제로초님 react nodebird 수강 중 강의 내용을 복습삼아 개인적으로 프로젝트를 진행해보는 중인데요, 초기에 레이아웃 구조를 만드는 중에 문제가 있어 질문드립니다.

현재 next 의 _app.js 에 AppLayout을 넣어주는 구조는 동일하게 가져갔으나 메뉴 중 user 라는 메뉴를 클릭 시 modal 을 출력하게 하여 로그인 폼을 따로 보여주고 싶은데요, AppLayout.js 코드 내에 아래와 같이 modal을 넣어주었고, modal 출력은 하는데 cancel 혹은 OK 버튼 클릭 시 useState로 modal의 visible을 false로 바꿔 modal을 닫는 동작이 안되네요

import React, { useStateuseCallback } from "react";
import { MenuLayoutIconColModal } from "antd";
import PropTypes from "prop-types";

const AppLayout = ({ children }) => {
  const { SubMenu } = Menu;
  const { HeaderSider } = Layout;
  const [modalVisiblesetModalVisible= useState(false);

  const showModal = useCallback(() => {
    setModalVisible(true);
    console.log("showModal: " + modalVisible);
  }, []);

  const handleModal = useCallback((e=> {
    setModalVisible(false);
    console.log("handleModal: " + modalVisible);
  }, []);


  return (
    <Layout>
      <Header className="header" style={backgroundColor: "#001a4d" }}>
        <div className="logo" />
        <Menu
          theme="dark"
          mode="horizontal"
          style={lineHeight: "64px" }}
        ></Menu>
        <h1 style={color: "white" }}></h1>
      </Header>
      <Col xs={24} md={6}>
        <Layout style={minHeight: "100vh" }}>
          <Sider width={200} collapsible style={backgroundColor: "#ffffff" }}>
            <Menu
              mode="inline"
              defaultSelectedKeys={["1"]}
              defaultOpenKeys={["sub1"]}
            >
              <Menu.Item key="1" onClick={showModal} >
                <Icon type="user" />
                <span>User</span>
{                <Modal
                  title="Login Form"
                  visible={modalVisible}
                  onOk={handleModal}
                  onCancel={handleModal}
                >
                  <p>Some contents</p>
                </Modal>}
              </Menu.Item>
            </Menu>
          </Sider>
        </Layout>
      </Col>
      <Col xs={24} md={18}>
        {children}
      </Col>
    </Layout>
  );
};

AppLayout.propTypes = {
  children: PropTypes.node
};

export default AppLayout;

_app.js 에 들어간 AppLayout에서 modal 을 바로 출력하는 것 자체가 잘못된 걸까요? 로그로 modal 출력/cancel버튼 클릭 시 state 값을 확인해보니 false 로만 출력이 됩니다. 혹시 이상한 점이 있을까요??

react javascript

Answer 4

0

leejg

아...감사합니다!

0

zerocho

Modal을 Menu.item 바깥으로 빼시면 됩니다.

0

leejg

답변 감사드립니다. 말씀대로 Menu.item 말고 그 내부에 Icon 이나 span 에 onClick 이벤트로 Modal 을 호출하니 잘 되네요. 이 방법은 Menu.item 범위 내의 Icon 이나 span 내용 범위만 클릭해야 Modal 을 출력해서 조금 부자연스러운데, 혹시 Menu.item 자체를 클릭했을 때 Modal을 출력할 다른 방안이 있을까요..?

0

zerocho

Menu.item 밑에 Modal이 들어있어서 그럽니다. 이벤트 버블링현상입니다. Modal의 onclick 실행 후, menu.item의 onclick이 다시 실행됩니다. 그래서 handleModal 후 showModal이 바로 실행됩니다.

next 10 이상에서는 redux dev tool 구동이 안되나요?

0

272

1

세션 갱신 문의 건

0

482

7

배포 진행 후 Highlight updates components render 표시

0

445

1

똑같은 기능을 하는 테이블

0

447

4

관계형

0

312

2

프론트 서버를 이용하지 않는경우

1

299

3

인피니트 스크롤링 사용시 오류

0

278

0

계속 이런에러가 떠서 해결하기는 했는데 어떤 의미인지 모르겠습니다.

0

433

2

req.user가 언제 생성되나요??

0

330

2

Cannot read property 'id' of null 에러

0

333

1

리트윗한 게시글 불러오는 sequelize

0

252

1

result.data에서 images인 이유

0

281

2

takeLatest에 대한 질문입니다.

1

342

2

프론트에서 express를 사용하지 않을때 동적라우팅

0

501

6

getInitialProps가 클라이언트에서 수행되는 이유?

0

258

1

리로드하면 팔로우 언팔로우 값이 초기화 되는 문제입니다.

0

445

2

스타일드 컴포넌트와 className을 통한 스타일 적용의 차이에 대해 궁금합니다

0

585

2

할인 쿠폰 사용이 안되는되요 (848-f9af83f183e3)

0

365

1

nodejs mvc 패턴

0

975

4

사용하고 보니, 람다 구성이 궁금합니다!

0

266

1

제로초님

0

445

1

새로고침 로그인 풀림 문제.

0

247

1

안녕하세요. 강의 너무 감사합니다

0

157

1

제로초님

0

170

1