강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

건상님의 프로필 이미지
건상

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

antd Menu toggle device toolbar 질문입니다.

작성

·

559

0

메뉴를 구현하고 모바일버전에서도 확인을 하고싶어서 개발자도구에서 toggle device toolbar를 클릭하고 메뉴의 버튼들을 눌렀는데

이러한 에러가 뜹니다.  그리고 모바일로 접속해서 클릭을 해봐도 동일한 오류가 뜹니다. 이러면은 antd-mobile로 메뉴를 두개로 구성을 해야하나요?

아래는 제 코드입니다.

import PropTypes from "prop-types";
import React, { useCallback } from "react";
import Link from "next/link"
import {Menu, Input, Row, Col} from "antd";
import UserProfile from "./UserProfile";
import LoginForm from "./LoginForm";
import styled from "styled-components";
import {useSelector} from "react-redux";
import  Router  from "next/router";
import useInput from "../hooks/useInput";


const InputSearch = styled(Input.Search)`
    vertical-align: middle;
`;

const AppLayout = ({ children }) => {
    const {me } = useSelector((state) => state.user);
    const [search, changeSearch] = useInput('');
    const searchHashtag = useCallback(() => {
        Router.push(`/hashtag/${search}`);
    }, [search]);

    return (
        <div>
            <Menu mode="horizontal">
                <Menu.Item key="home">
                    <Link href={"/"}><a>home</a></Link>
                </Menu.Item>
                <Menu.Item key="profile">
                    <Link href={"/profile"}><a>profile</a></Link>
                </Menu.Item>
                <Menu.Item key="search">
                    <InputSearch  
                        enterButton 
                        value={search}
                        onChange={changeSearch}
                        onSearch={searchHashtag}/>
                </Menu.Item>
                <Menu.Item key="signup">
                    <Link href={"/signup"}><a>signup</a></Link>
                </Menu.Item>
            </Menu>
            <Row gutter={8}>
                <Col xs={24} md={6}>
                    {me ? <UserProfile/> : <LoginForm />}
                </Col>
                <Col xs={24} md={12}>{children}</Col>
                <Col xs={24} md={6}><a href="https://velog.io/@mayrang" target="_blank" rel="noreferrer noopener">Made by Mayrang</a> </Col>
            </Row>
        </div>
    );
};



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

export default AppLayout;

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

모바일이 아닐 때는 에러가 안 나나요? antd 깃헙가서 에러메시지로 검색해보세요.

건상님의 프로필 이미지
건상
질문자

네 모바일이 아닐때는 에러가안납니다 브라우저 넓이를 모바일 크기와 동일한 ui까지 줄여놓아도 에러가 안나고 모바일, 태블릿, 개발자도구 toggle device bar에서만 문제가 나타나고 있습니다. 말씀하신대로 github에 검색을 해봤는데 리액트 18의 createRoot와 관련이 있다고 reactDom.render 레거시를 쓰면 발생하지 않는다고 까지는 나와있는데 명확한 해결책은 아직 없는거 같습니다

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

일단 이 부분은 라이브러리 문제이므로 해결될 때까지 대기하는 수밖에 없겠습니다.

건상님의 프로필 이미지
건상
질문자

inline mode에서는 발생을 안하는거 보니 horizontal mode에서 문제가 생기는거같은데 inline mode는 모바일환경에서 적합한 ui는 아니여서 당분간은 다른 라이브러리의 menu를 쓰거나 직접 코딩하는 수 밖에 없을까요?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

리액트17 모드로 쓰는 방법도 있습니다.

건상님의 프로필 이미지
건상

작성한 질문수

질문하기