작성
·
145
0
섹션08 퀴즈를 풀고 있는데 상품등록 버튼을 누르면 오류가 떠요.
try, catch 사용하면 오류 메세지가 떠서 확인해보니 apolloError가 뜨네요..
뭔가 잘못 입력한게 있는 것 같은데 어느 부분이 잘못되었는지 모르겠어요ㅠㅠ
폴더 경로
/section08/boards
import { useMutation, gql } from "@apollo/client";
import { useState } from "react";
import { useRouter } from "next/router";
const CREATE_PRODUCT = gql`
mutation createProduct($seller: String, $createProductInput: CreateProdutInput!){
createProduct(seller: $seller, createProductInput: $createProductInput){
_id
number
message
}}
`
export default function CreateProductQuizPage() {
const router = useRouter()
const [seller, setSeller] = useState();
const [name, setName] = useState();
const [detail, setDetail] = useState();
const [price, setPrice] = useState();
const [myProduct] = useMutation(CREATE_PRODUCT);
const onClickSubmitProduct = async () => {
try {
const result = await myProduct({
variables: {
seller: seller,
createProductInput: {
name: name,
detail: detail,
price: price
}
}
});
console.log(result);
router.push(`/section08/product/${result.data.createProduct.id}`)
} catch (error) {
alert(error.messege)
}
}
const onChangeSeller = (event) => {
setSeller(event.target.value)
}
const onChangeName = (event) => {
setName(event.target.value)
}
const onChangeDetail = (event) => {
setDetail(event.target.value)
}
const onChangePrice = (event) => {
setPrice(event.target.value)
}
return (
<div>
<div>판매자 :
<input type="text" onChange={onChangeSeller} />
</div>
<div>상품명 :
<input type="text" onChange={onChangeName} />
</div>
<div>상품내용 :
<input type="text" onChange={onChangeDetail} />
</div>
<div>상품가격 :
<input type="text" onChange={onChangePrice} />
</div>
<button onClick={onClickSubmitProduct}>상품등록</button>
</div>
)
}
폴더 경로
/section08/product/[id]
import { useQuery, gql } from "@apollo/client";
import {useRouter} from "next/router"
const FETCH_PRODUCT = gql`
query fetchProduct($productId: ID){
fetchProduct(productId: $productId){
seller
name
detail
price
}
}
`
export default function CreateProductQuizIdPage(){
const router = useRouter();
const {data} = useQuery(FETCH_PRODUCT, {
variables : {
productId: router.query.id
}
});
console.log(data)
return(
<div>
<div>{router.query.id} 상세정보</div>
<div>판매자 : {data?.fetchProduct?.seller}</div>
<div>상품명 : {data?.fetchProduct?.name}</div>
<div>상품내용 : {data?.fetchProduct?.detail}</div>
<div>상품가격 : {data?.fetchProduct?.price}</div>
</div>
)
}
productId: router.query.id 는 수업 내용 보며 입력했는데 아직 왜 이렇게 작성 되어야는지 이해가 되지 못했습니다..
createProduct에서 등록된 아이디가 fetchProduct의 [id] (변수 id)가 되는게 맞나요? 너무 헷갈려서 다시 여쭤봅니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
지은님의 상품 등록 관련 문제를 살펴보았습니다. 특정 오류가 발생했을 때, 여러 가지 가능성을 확인해야 합니다. 지은님께서 제공해주신 스크린샷과 코드를 기반으로 몇 가지 점검 사항을 말씀드리겠습니다.
CREATE_PRODUCT
뮤테이션 정의 부분에서 CreateProdutInput
오타가 있는 것 같습니다. 올바르게는 CreateProductInput
이어야 합니다.CREATE_PRODUCT
뮤테이션 실행 결과에서 id
대신 _id
를 사용해야 하는지 확인해 보세요. result.data.createProduct.id
부분이 올바른지 재검토하셔야 합니다.CREATE_PRODUCT
뮤테이션과 관련된 요청의 변수 부분을 다시 한 번 점검해 보세요.이와 같은 내용들을 지은님의 코드에 반영하여 다시 시도해 보시기 바랍니다. 추가적으로 문제가 해결되지 않는다면, 사용 중인 GraphQL API의 설계 문서나 스키마를 참고하여 요청 형식이 올바른지 확인해보시는 것이 좋습니다.
에러 해결에 도움이 되었길 바랍니다. 다른 질문이 있으시면 언제든지 질문해 주세요.