강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của isbcom10046265
isbcom10046265

câu hỏi đã được viết

Một trại huấn luyện phát triển toàn diện thực sự dành cho những người không chuyên ngành

[그랩님께]101강 안드로이드 에러들(Key prop)해결방법 궁금합니다.

Viết

·

88

·

Đã chỉnh sửa

0

그랩님, 강의 잘 듣고 있습니다.

다름이 아니라 궁금한 사항(=에러 해결방법)이 필요해서 글을 남기게 되었습니다.


101강을 듣고 있는데요 Axios 에러(400)안드로이드 스튜디오 에뮬레이터에서 발생하고 있습니다.

일단 101강 처음부터 ~ 4분 52초까지 그랩님께서 작성하신 소스코드를 똑같이 작성 후결과를 보려하는데,
농구공 그림(세부사항:판매자:그랩,가격,상품명등등) 이 나오지 않아서 이것을 어떻게 하면 그랩님과 같은
결과를 볼 수 있을지에 대해 여쭈어봅니다.

사진 1 첨부 : 판매되는 상품들 밑에 100강만 들었을 시에 농구공 화면이 잘 나왔으나 101강 4분 52초까지
의 내용의 소스코드를 입력 후 결과값 보면 400 에러도 발생하고 농구공도 안나오게 됩니다.
어떻게 해야 하나요?

101강 사진1.jpg.webp


사진 2 첨부 : 구체적인 에러 내용

안드로이드 에뮬레이터 400코드 에러.jpg.webp

 

[사진3] 스크롤은 적용이 안 된 것 같은데요, 상품이 2개 뿐이라 스크롤이 없는 건가요?

스크롤이 안되는 에러1.jpg.webp


[사진4] 사진 3에 대한 구체적인 에러 ----> 어떻게 에러를 해결 할 수 있을까요?

구체적인 에러2 해결 어떻게하는지.jpg.webp

 

안드로이드 스튜디오에서 상품 정보를 불러오지 못하는
것에 대해
서 어떻게 해결해야 할 지 차근 차근 잘 알려주셨으면 좋겠습니다.

그리고 마지막 질문은 안드로이드 애물레이터가 잘 되는지 확인하려면
grab-market-server에서 npm start를 해준 뒤 확인하면 되는건가요?
아니면 grab-market-mobile에서 npm start를 해준 뒤 a(=Open Android)를 누르면 되는 건가요?
아니면 둘다 동시에 npm start를 해주는 건가요?

 

그리고 아래에는 grab-market-mobile 폴더의 App.js 제 소스 코드를 아래에 첨부하겠습니다.

 

import { StatusBar } from "expo-status-bar";
import React from "react";
import { StyleSheet, Text, View, Image, ScrollView } from "react-native";
import BasketballImage from "./assets/products/basketball1.jpeg";
import Avatar from "./assets/icons/avatar.png";
import {API_URL} from "./config/constants";
import axios from "axios";
import dayjs from "dayjs";
import relativeTime from "dayjs/plugin/relativeTime";
import "dayjs/locale/ko";
dayjs.extend(relativeTime);
dayjs.locale("ko");

export default function App() {
  const [products, setProducts] = React.useState([])
  React.useEffect(()=>{
    axios.get(`${API_URL}/products`).then((result)=>{
      setProducts(result.data.products);
    }).catch((error)=>{
      console.error(error);
    })
  },[])

  return ( <View style={styles.container}>
    <ScrollView>
     <Text style={styles.headline}>판매되는 상품들</Text>
     <View style={styles.productList}>
     {
      products.map((product, index)=>{
        return (<View style={styles.productCard}>
      <View>
        <Image style={styles.ProductImage} source={{uri: `${API_URL}/${product.imageUrl}`,}} resizeMode={"contain"} />
      </View>
      <View style={styles.productContents}>
        <Text style={styles.productName}>{product.name}</Text>
        <Text style={styles.productPrice}>{product.price}원</Text>
        <View style={styles.productFooter}>
        <View style={styles.productSeller}>
          <Image style={styles.productAvatar} source={Avatar} />
          <Text style={styles.productSellerName} >{product.seller}</Text>
        </View>
        <Text style={styles.productDate}>{dayjs(product.createdAt).fromNow()}</Text>
      </View>
     </View>
    </View>);
      })
     }
     </View>
     </ScrollView>
    </View>
  
);
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    paddingTop: 32,

  },
  productCard: {
    width: 320,
    borderColor: 'rgb(230,230,230)',
    borderWidth:1,
    borderRadius: 16,
    backgroundColor: "white",
    marginBottom: 8,
   

  },
  ProductImage :{
    width: '100%',
    height: 210
  },
  productContents : {
    padding: 8
  },
  productSeller : {
    flexDirection: 'row',
    alignItems: 'center'
  },
  productAvatar: {
    width:24,
    height:24,
  },
  productFooter: {
    flexDirection: 'row',
    justifyContent:'space-between',
    alignItems: 'center',
    marginTop: 12,
  },
  productName : {
    fontSize: 16
  },
  productPrice: {
    fontSize: 18,
    fontWeight: '600',
    marginTop: 8
  },
  productSellerName: {
    fontSize: 16,

  },
  productDate: {
    fontSize: 16,
  },
  productList: {
    alignItems:"center",
  },
  headline : {
    fontSize: 24,
    fontWeight: "800",
    marginBottom:24
  }
  
  
});

그랩님의 답변을 기다립니다.

HTML/CSSjavascriptreactnode.jsreact-native머신러닝expresstensorflow

Câu trả lời 2

0

grab님의 프로필 이미지
grab
Người chia sẻ kiến thức

  1. key prop의 문제는 Array 형태로 렌더링을 하려고 할 때(products.map...) 해당 컴포넌트에 'key'라는 특성을 주입해줘야 한다는 건데요. 이건 React에서 기본적으로 지켜야 하는 규칙 중 하나입니다. 현재 아래 코드에서 key를 추가해주면 해결될 것 같습니다~
    as-is { products.map((product, index)=>{ return (<Viewstyle={styles.productCard}>


    to-be { products.map((product, index)=>{ return (<Viewstyle={styles.productCard} key={product.id}>

  1. config/constants 파일에 API_URL 변수의 값이 현재 어떻게 되어있나요? ngrok의 경우 재실행할 때마다 URL이 바뀌기 때문에 API_URL을 이에 맞춰 조정해주셔야 합니다!

  2. 스크롤은 제품이 2개밖에 없어서 그런 것 같고, 제품이 늘어나면 자동 적용될 것입니다.

isbcom1004님의 프로필 이미지
isbcom1004
Người đặt câu hỏi

그랩님, 진심으로 감사합니다 !
그동안 잘 되지 않았던 에러들이 해결이 되었습니다.
좋은 강의 감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. isbcom1004님.

안드로이드 스튜디오 에뮬레이터에서 Axios 400 에러 및 상품 정보 불러오기에 어려움이 있으신 것 같습니다. 이 문제는 주로 서버와 클라이언트 간의 통신 오류로 인해 발생할 수 있습니다. 아래에 몇 가지 해결 방법을 제시드리겠습니다:

1. Axios 400 에러의 원인과 해결 방법

  • 요청 URL 확인: API_URL이 올바르게 설정되어 있는지 확인해주세요. 종종 오타나 잘못된 주소 설정이 400 에러를 유발할 수 있습니다.
  • 서버 상태 확인: 백엔드 서버가 정상적으로 실행 중인지 확인하시고, 포트도 올바른지 점검해보세요.
  • API 요청 구조: 요청을 보낼 때 필요한 헤더나 파라미터가 누락되지 않았는지 확인합니다. 조건에 맞는 요청인지 반드시 체크하세요.

2. 이미지 및 데이터 불러오기 문제

  • 이미지 경로 확인: 상품 이미지 URL이 올바르게 설정되어 있는지 확인하세요. 경로가 잘못되었다면 수정이 필요합니다.
  • 데이터 체크: setProducts(result.data.products) 부분에서 result.data.products가 실제로 존재하는 데이터인지 콘솔로 확인해볼 수 있습니다.

3. 에뮬레이터 및 서버 실행 방법

그랩 마켓 서버와 모바일 앱의 연동을 위해 다음 절차를 따르세요:
- grab-market-server 실행: 백엔드 서버를 먼저 실행 (npm start).
- grab-market-mobile 실행 및 에뮬레이터 열기: 그 후 npm start로 모바일 프로젝트를 실행한 뒤, a 명령어로 안드로이드 에뮬레이터를 엽니다.

기존 유사 문제와의 참고 자료

관련 유사 문제 해결 방법을 참고해 보시기 바랍니다:
- axios 주소 변경 이후 화면이 뜨지 않아 문의드립니다!

위 해결 방법들이 기대한 결과를 얻는데 도움이 되길 바랍니다. 추가적으로, 문제가 여전히 지속된다면, 더 상세한 에러 메시지나 콘솔 로그를 제공해주시면 감사하겠습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

isbcom1004님의 프로필 이미지
isbcom1004
Người đặt câu hỏi

그랩님의 답변을 기다립니다.

위에서 작성했듯이 Key prop
[사진4] 사진 3에 대한 구체적인 에러 ----> 어떻게 에러를 해결 할 수 있을까요?
이에 대한 답변 부탁 드립니다.

Hình ảnh hồ sơ của isbcom10046265
isbcom10046265

câu hỏi đã được viết

Đặt câu hỏi