inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)

서버사이드 렌더링

에러가 뜨는데 다 고쳐도 원인을 모르겠어요.

해결된 질문

452

스타현이

작성한 질문수 14

0

깃헙에있는 강사님 소스 내용으로 다 덮어씌어도

똑같은 에러가 뜹니다 ㅠㅠ..

graphql rest-api react

답변 5

0

정재남

windows의 경우 url을 모두 소문자로 바꿔버리는 현상이 있었네요.

// MsgList
const { query: { userId = '' } } = useRouter()

이 부분에서 userId를 불러오지 못하여 발생한 오류였습니다.

const { query } = useRotuer()
const userId = query.userId || query.userid || ''

이렇게 하면 url queryString의 대소문자 여부에 관계없이 잘 동작하게 될 것 같습니다.

0

스타현이

넵!!

0

스타현이

import { useState, useEffect, useRef } 
from 'react';
import { useRouter } from 'next/router';
import MsgItem from './MsgItem';
import MsgInput from './MsgInput';
import fetcher from '../fetcher';
import useInfiniteScroll 
from '../hooks/useInfiniteScroll';

const MsgList = ({ smsgs, users }) => {
const {query: { userId = '' },} = useRouter();
const [msgs, setMsgs] = useState(smsgs);
const [editingId, setEditingId] = useState(null);
const [hasNext, setHasNext] = useState(true);
const fetchMoreEl = useRef(null);
const intersecting = 
useInfiniteScroll(fetchMoreEl);

const onCreate = async (text) => {
const newMsg = await fetcher('post', 
'/messages', { text, userId });
    if (!newMsgthrow Error('something wrong');
    setMsgs((msgs) => [newMsg, ...msgs]);
  };

const onUpdate = async (text, id) => {
    const newMsg = await fetcher
('put', `/messages/${id}`, { text, userId });
    if (!newMsgthrow Error('something wrong');
    setMsgs((msgs) => {
      const targetIndex = msgs.findIndex(
(msg) => msg.id === id);
      
if (targetIndex < 0return msgs;
      const newMsgs = [...msgs];
      newMsgs.splice(targetIndex, 1, newMsg);
      return newMsgs;
    });
    doneEdit();
  };

  const onDelete = async (id) => {
    const receivedId = await fetcher(
'delete', `/messages/${id}`, {
      params: { userId },
    });
    setMsgs((msgs) => {
      const targetIndex = msgs.findIndex(
(msg) => msg.id === receivedId + '');
      if (targetIndex < 0return msgs;
      const newMsgs = [...msgs];
      newMsgs.splice(targetIndex, 1);
      return newMsgs;
    });
  };

  const doneEdit = () => setEditingId(null);

  const getMessages = async () => {
    const newMsgs = await fetcher(
'get', '/messages', {
      params: { 
cursor: msgs[msgs.length - 1]?.id || '' },
    });
    if (newMsgs.length === 0{
      setHasNext(false);
      return;
    }
    setMsgs((msgs) => [...msgs, ...newMsgs]);
  };

  useEffect(() => {
    if (intersecting && hasNextgetMessages();
  }, [intersecting]);

  return (
    <>
      <MsgInput mutate={onCreate/>
      <ul className="messages">
        {msgs.map((x) => (
          <MsgItem
            key={x.id}
            {...x}
            onUpdate={onUpdate}
            onDelete={() => onDelete(x.id)}
            startEdit={() => setEditingId(x.id)}
            isEditing={editingId === x.id}
            myId={userId}
            user={users[x.userId]}
          />
        ))}
      </ul>
      <div ref={fetchMoreEl/>
    </>
  );
};

export default MsgList;
import MsgInput from './MsgInput';

const MsgItem = ({
  id,
  userId,
  timestamp,
  text,
  onUpdate,
  onDelete,
  isEditing,
  startEdit,
  myId,
  user,
}=> (
  <li className="messages__item">
    <h3>
      {user.nickname}{' '}
      <sub>
        {new Date(timestamp).toLocaleString(
'ko-KR', {
          year: 'numeric',
          month: 'numeric',
          day: 'numeric',
          hour: '2-digit',
          minute: '2-digit',
          hour12: true,
        })}
      </sub>
    </h3>

    {isEditing ? (
      <>
        <MsgInput mutate={onUpdatetext={text
id={id/>
      </>
    ) : (
      text
    )}

    {myId === userId && (
      <div className="messages__buttons">
        <button onClick={startEdit}>수정</button>
        <button onClick={onDelete}>삭제</button>
      </div>
    )}
  </li>
);

export default MsgItem;

0

스타현이

http://localhost:3000/?userid=roy 이렇게 입력해도 똑같습니다.. ㅠㅠ

0

스타현이

질문있습니다 !

0

132

2

sass 오류

0

174

1

does not match

0

164

2

프로젝트 배포

0

299

1

코드 똑같이 쳤는데 scss 적용이 안돼요 ㅠㅠ

0

745

1

scss 스타일 적용

0

478

2

yarn run client시 에러는 안 나는데 호스트가 열리질 않습니다 ㅠㅠ

0

430

1

무한 스크롤 관련 질문 드립니다.

1

512

2

props 를 넘겨줄 때 함수를 그대로 넘겨줄 때와 화살표 함수로 감싸서 넘겨줄 때의 차이가 궁금합니다 :)

0

454

1

getInitialProps 과 getServerSideProps에 대해서 질문드립니다!

0

1144

1

node-sass를 했을 때 에러가 발생합니다.

0

377

1

[소스 다운로드 안됩니다]

0

323

1

rendered HTML error 관련

2

2187

2

닉네임 부분이 잘못되어 있는 것 같습니다.

0

448

2

Typescript 질문드려요!

0

331

1

error 관련하여

1

289

1

질문이 있습니다!.

0

278

1

질문이 있습니다!

0

485

1

수정된 내용까지 확인했는데 에러가 납니다 ㅠ

1

303

2

React Hydration Error 가 나는 이유가 무엇일까요 ?;;

0

631

1

useRef를 선호하시는 이유가 궁금합니다!

1

794

1

react-query 4.0.0 버전에선 에러가 납니다

0

668

1

gql 백틱 안에 색깔 입혀지는 확장프로그램이 어떤건지 알 수 있을까요?

2

685

1

typeScript에 대한 질문을 어디다가 올려야할지 몰라서 여기다가 남깁니다!

0

303

1