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

아따마님의 프로필 이미지
아따마

작성한 질문수

React로 NodeBird SNS 만들기

7-14. react-helmet SSR

renderPage

작성

·

461

0

const page = context.renderPage((App) => (props) => <App {...props} />);

 return { ...page, helmet: Helmet.renderStatic() };

추가후 로그인 하면 페이지가 넘어가질 않습니다.

이상태가 되어 버립니다.

답변 15

1

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

방법은 다 맞는데요. 어딘가에서 에러가 있거나 설정 오타가 있는 것 같습니다. 오타 찾는 게 매우 힘드니 프로젝트 다시 만드시면서 찾아보시는 게 좋습니다.

1

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

아뇨 저거면 충분합니다. 빌드를 다시 해보시고 엘레먼트 탭에서 클래스가 제대로 들어갔는지 확인해보세요.

1

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

웹팩 설정에서 css 파일 처리를 위한 관련 로더를 추가해주셔야 합니다. css-loader를 추가하시면 됩니다.

1

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

이 부분은 next9 버전을 쓰신다면 다른 부분 코드와 충돌이 나기때문에 제가 정확하게 원인을 파악하기 좀 어렵습니다.

1

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

위 메시지는 에러가 아니라 경고입니다. 무시하셔도 됩니다. 페이지 넘어가지 않는 것은 다른 문제를 찾아보셔야 합니다. 저 코드가 없다면 원래 페이지가 동작하셨던 건가요? 아니면 document.js가 없었을 때 동작하셨던 건가요?

1

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

네네 그냥 지워주세요

1

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

_document.js 말씀하시는 거죠? 이 부분은 버전 문제일 수 있습니다. next.js 버전이 올라가서 코드가 바뀌었습니다. 나중에 styled-components까지 같이 쓰시면 저는 코드가 이렇습니다.

import React from 'react';
import Helmet from 'react-helmet';
import Document, { Main, NextScript } from 'next/document';
import { ServerStyleSheet } from 'styled-components';

class MyDocument extends Document {
static async getInitialProps(context) {
const sheet = new ServerStyleSheet();
const originalRenderPage = context.renderPage;

try {
context.renderPage = () => originalRenderPage({
enhanceApp: (App) => (props) => sheet.collectStyles(<App {...props} />),
});
const initialProps = await Document.getInitialProps(context);
return {
...initialProps,
helmet: Helmet.renderStatic(),
styles: (
<>
{initialProps.styles}
{sheet.getStyleElement()}
</>
),
};
} finally {
sheet.seal();
}
}

render() {
const { htmlAttributes, bodyAttributes, ...helmet } = this.props.helmet;
const htmlAttrs = htmlAttributes.toComponent();
const bodyAttrs = bodyAttributes.toComponent();

return (
<html {...htmlAttrs} lang="ko">
<head>
{this.props.styles}
{Object.values(helmet).map((el) => el.toComponent())}
</head>
<body {...bodyAttrs}>
<Main />
{process.env.NODE_ENV === 'production'
&& <script src="https://polyfill.io/v3/polyfill.min.js?features=default%2Ces2015%2Ces2016%2Ces2017%2Ces2018%2Ces2019" />}
<NextScript />
</body>
</html>
);
}
}

export default MyDocument;

0

아따마님의 프로필 이미지
아따마
질문자

아래와 같이 모듈식으로 변경을 하였는데도 css가 적용이 안되네요.

import css from '../style.css';

0

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

import { name } from 경로;

className={name}

이렇게 css 모듈식으로는 안되나요?

0

아따마님의 프로필 이미지
아따마
질문자

_app.js 에서  import '../style.css'; 해줬고 엘레먼트에 className 지정을 했는데도 적용이 안되요 컴파일도 다시 했는데

0

아따마님의 프로필 이미지
아따마
질문자

next에서 css를 추가하려니 next.config.js파일을 만들고 @zeit/next-css를 추가 해야 된다고 해서 

아래와 같이 추가해서 해봤는데 css 적용이 안되네요 또 다른 설정을 해줘야 되나요?

위의 사진과 같은 에러 표시는 사라 졌는데 적용이 안되네요.

0

아따마님의 프로필 이미지
아따마
질문자

next 버전 다운그레이드 했습니다.

css 파일로 react-slick css 를 변경했는데 app.js document.js 변경후

아래와 같은 에러가 뜹니다. 어떤 현상인가요?

0

아따마님의 프로필 이미지
아따마
질문자

네네 document.js 만들고나서 동작하지 않습니다.

0

아따마님의 프로필 이미지
아따마
질문자

코드 변경을 했는데도 페이지가 넘어가지 않고 위와 같은 에러가 나오네요....

0

아따마님의 프로필 이미지
아따마
질문자

답변으로 수정후 컴파일 하는데

<Provider>를 감싸는

<Container> 태그에 대해 에러 뜨는데 버전 문제로 삭제 해줘야 되는 건가요? 

Warning: the `Container` in `_app` has been deprecated and should be removed. https://err.sh/zeit/next.js/app-container-deprecated

아따마님의 프로필 이미지
아따마

작성한 질문수

질문하기