inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스타현이님의 게시글

스타현이 스타현이

@dohyun0505

수강평 작성수
36
평균평점
4.9

게시글 10

질문&답변

Post생성 에러가 나옵니다!

등록하는 타이틀은 처음 작성하는 타이틀인데 중복된다는 에러가 이해가 안됩니다..

좋아요수
1
댓글수
3
조회수
424

질문&답변

Post생성 에러가 나옵니다!

이미지 파일이 2개밖에 안올라가서 추가로 댓글로 더 등록.

좋아요수
1
댓글수
3
조회수
424

질문&답변

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

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 ( ! newMsg ) throw Error ( ' something wrong ' ) ; setMsgs ( ( msgs ) => [ newMsg , ... msgs ]) ; }; const onUpdate = async ( text , id ) => { const newMsg = await fetcher ( ' put ' , ` /messages/ ${ id }` , { text , userId } ) ; if ( ! newMsg ) throw Error ( ' something wrong ' ) ; setMsgs ( ( msgs ) => { const targetIndex = msgs . findIndex ( ( msg ) => msg . id === id ) ; if ( targetIndex 0 ) return 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 0 ) return 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 && hasNext ) getMessages () ; }, [ 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 ={ onUpdate } text ={ text } id ={ id } /> ) : ( text ) } { myId === userId && ( div className = " messages__buttons " > button onClick ={ startEdit } > 수정 button > button onClick ={ onDelete } > 삭제 button > div > ) } li > ) ; export default MsgItem ;

좋아요수
0
댓글수
5
조회수
476

질문&답변

질문있습니다.

감사합니다. 이제 정확히 이해됬습니다!

좋아요수
0
댓글수
3
조회수
271