강의

멘토링

로드맵

Inflearn brand logo image

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

ddorri83님의 프로필 이미지
ddorri83

작성한 질문수

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

11.3) Context 분리하기

day17과제중 Context 객체생성 오류발생했습니다.

해결된 질문

작성

·

34

·

수정됨

0

day17과제하던중에, Context 객체 생성하는데 오류가 발생했습니다.

export를 붙여서 진행하면 화면과 같이 오류가 발생하고,

image.png

 

export를 제외하면 랜더링할때 빈화면이 나옵니다. 다른컴퍼넌트에는 useContext이용해서 함수 공급받는거 작성했습니다.

import "./App.css"
import Header from "./components/Header"
import ContactEditor from "./components/ContactEditor"
import List from "./components/List"
import {useState, useRef, useCallback, createContext, useMemo} from 'react'


const mockData = [  //임시데이터라는 뜻(mockData)
    {
        id: 0,
        name: "이정환",
        email: "king32@gmail.com"
    },
    {
        id: 1,
        name: "김정환",
        email: "queen25@gmail.com"
    },
    {
        id: 2,
        name: "하정환",
        email: "prince13@gmail.com"
    },
]


export const ContactStateContext = createContext();
export const ContactDispatchContext = createContext();

function App() {


    const [contact, setContact] = useState(mockData);
    const idRef = useRef(3)

    const onCreate = useCallback((name,email)=>{
        const newContact = {
            id: idRef.current++,
            name: name,
            email: email,
        };
        setContact([newContact, ...contact ]);
    },[]);

    const onDelete = useCallback((targetId) => {
        setContact(contact.filter((it) => it.id!== targetId));
    },[])

    const memoizedDispatch = useMemo(
        ()=>({onCreate, onDelete}),[]
    );

    return(
        <div className="App">
            <Header />
            <ContactStateContext.Provider value={contact}>
                <ContactDispatchContext.Provider value={memoizedDispatch}>
                    <ContactEditor />
                    <List />
                </ContactDispatchContext.Provider>
            </ContactStateContext.Provider>

        </div>
    )
}

export default App;

답변 1

1

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

해당 경고문은 ESLint(코드 정적 분석 도구)가 발생시킨것으로, 지금처럼 하나의 파일에서 2개 이상의 컴포넌트를 내보낼 경우 발생할 수 있습니다. 이는 단순한 경고 메세지일 뿐 기능상에는 아무런 영향을 주지 않으므로 무시하셔도 괜찮습니다.

Vite React App의 버전이 변경되면서 기본으로 설정된 ESLint 규칙이 자주 변동되어 이런 현상이 발생하는데요, 만약 해당 경고 메세지를 보기 싫으시다면 eslint 설정 파일에 아래의 규칙을 추가해주시면 됩니다.

"react-refresh/only-export-components": "off",
ddorri83님의 프로필 이미지
ddorri83

작성한 질문수

질문하기