커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
3-3 Mainpage 오류
[왕초보] 나만의 수익성 앱, 앱개발 종합반 v5
3주차
북마크
김*원
댓글
16
추천
0
조회수
36
조회수
36
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


강사님의 화면과 같은 적용모습이 나오지 않고 오류가 뜹니다.

웹강의 강사분처럼 일일이 하나하나 타이핑이나 붙여넣기를 보여주는 것도 아니고 축구를 배우러 왔는데 이분한테는 그냥 말로만 축구를 배우러 온 느낌이 강하네요

앞으로 남은 강의들도 이런 식이라고 생각할거라고 생각되는데...

코드니스펫도 MainPage.js 안의 코드내용이 다 다른데 이름은 다 똑같고 보아하니 예전에 찍은 영상들은 강의 영상이 더 분할되어 있던 것 같은데 영상을 하나로 취합하면서 코드니스펫도 하나의 강의자료에 담아내서 더 헷갈리게 만든 것 같네요.





작성한 코드 및 에러 메세지

AboutPage


import React from 'react'

import {View,Text,StyleSheet,Image, TouchableOpacity} from 'react-native'



export default function AboutPage(){

  const aboutImage = "https://storage.googleapis.com/sparta-image.appspot.com/lecture/about.png"

 return (

  <View style={styles.container}>

    <Text style={styles.title}> 설날</Text>

    

    

    <View style={styles.textContainer}>

      <Image style={styles.aboutImage} source={{uri:aboutImage}} resizeMode={"cover"}/>

      <Text style={styles.desc01}>많은 내용을 간결하게 담아내려 노력했습니다!</Text>

      <Text style={styles.desc02}>꼭 완주 하셔서 꼭 여러분것으로 만들어가시길 바랍니다</Text>

      <TouchableOpacity style={styles.button}>

        <Text style={styles.buttonText}>여러분의 인스타계정</Text>

      </TouchableOpacity>

    </View>

  </View>)

}


const styles = StyleSheet.create({

  container: {

    flex:1,

    backgroundColor:"#1F266A",

    alignItems:"center"

   

  },

  title: {

    fontSize:30,

    fontWeight:"700",

    color:"#fff",

    paddingLeft:30,

    paddingTop:100,

    paddingRight:30

  },

  textContainer: {

    width:300,

    height:500,

    backgroundColor:"#fff",

    marginTop:50,

    borderRadius:30,

    justifyContent:"center",

    alignItems:"center"

  },

  aboutImage:{

    width:150,

    height:150,

    borderRadius:30

  },

  desc01: {

    textAlign:"center",

    fontSize:20,

    fontWeight:"700",

    paddingLeft:22,

    paddingRight:22


  },

  desc02: {

    textAlign:"center",

    fontSize:15,

    fontWeight:"700",

    padding:22

  },

  button:{

    backgroundColor:"orange",

    padding:20,

    borderRadius:15

  },

  buttonText: {

    color:"#fff",

    fontSize:15,

    fontWeight:"700"

  }

})



------------------------------------------------------------------------

DetailPage


import React from 'react';

import { StyleSheet, Text, View, Image, ScrollView,TouchableOpacity,Alert } from 'react-native';


export default function DetailPage() {



  const tip = {

    "idx":9,

    "category":"재테크",

    "title":"렌탈 서비스 금액 비교해보기",

    "image": "https://storage.googleapis.com/sparta-image.appspot.com/lecture/money1.png",

    "desc":"요즘은 정수기, 공기 청정기, 자동차나 장난감 등 다양한 대여서비스가 활발합니다. 사는 것보다 경제적이라고 생각해 렌탈 서비스를 이용하는 분들이 늘어나고 있는데요. 다만, 이런 렌탈 서비스 이용이 하나둘 늘어나다 보면 그 금액은 겉잡을 수 없이 불어나게 됩니다. 특히, 렌탈 서비스는 빌려주는 물건의 관리비용까지 포함된 것이기에 생각만큼 저렴하지 않습니다. 직접 관리하며 사용할 수 있는 물건이 있는지 살펴보고, 렌탈 서비스 항목에서 제외해보세요. 렌탈 비용과 구매 비용, 관리 비용을 여러모로 비교해보고 고민해보는 것이 좋습니다. ",

    "date":"2020.09.09"

  }


  const popup = () => {

    Alert.alert("팝업!!")

  }

  return (

    // ScrollView에서의 flex 숫자는 의미가 없습니다. 정확히 보여지는 화면을 몇등분 하지 않고

    // 화면에 넣은 컨텐츠를 모두 보여주려 스크롤 기능이 존재하기 때문입니다.

    // 여기선 내부의 컨텐츠들 영역을 결정짓기 위해서 height 값과 margin,padding 값을 적절히 잘 이용해야 합니다.

    <ScrollView style={styles.container}>

      <Image style={styles.image} source={{uri:tip.image}}/>

      <View style={styles.textContainer}>

        <Text style={styles.title}>{tip.title}</Text>

        <Text style={styles.desc}>{tip.desc}</Text>

        <TouchableOpacity style={styles.button} onPress={()=>popup()}><Text style={styles.buttonText}>팁 찜하기</Text></TouchableOpacity>

      </View>

      

    </ScrollView>

  

  )

}


const styles = StyleSheet.create({

  container:{

    backgroundColor:"#000"

  },

  image:{

    height:400,

    margin:10,

    marginTop:40,

    borderRadius:20

  },

  textContainer:{

    padding:20,

    justifyContent:'center',

    alignItems:'center'

  },

  title: {

    fontSize:20,

    fontWeight:'700',

    color:"#eee"

  },

  desc:{

    marginTop:10,

    color:"#eee"

  },

  button:{

    width:100,

    marginTop:20,

    padding:10,

    borderWidth:1,

    borderColor:'deeppink',

    borderRadius:7

  },

  buttonText:{

    color:'#fff',

    textAlign:'center'

  }

})



----------------------------------------------------------------------------------------


MainPage



import React,{useState,useEffect} from 'react';

import { StyleSheet, Text, View, Image, TouchableOpacity, ScrollView} from 'react-native';


const main = 'https://storage.googleapis.com/sparta-image.appspot.com/lecture/main.png'

import data from '../data.json';

import Card from '../components/Card';

import Loading from '../components/Loading';

export default function MainPage() {

 //useState 사용법

 //[state,setState] 에서 state는 이 컴포넌트에서 관리될 상태 데이터를 담고 있는 변수

 //setState는 state를 변경시킬때 사용해야하는 함수


 //모두 다 useState가 선물해줌

 //useState()안에 전달되는 값은 state 초기값

 const [state,setState] = useState([])

 


 //하단의 return 문이 실행되어 화면이 그려진다음 실행되는 useEffect 함수

 //내부에서 data.json으로 부터 가져온 데이터를 state 상태에 담고 있음

 const [ready,setReady] = useState(true)


 useEffect(()=>{

   

  //뒤의 1000 숫자는 1초를 뜻함

  //1초 뒤에 실행되는 코드들이 담겨 있는 함수

  setTimeout(()=>{

    setState(data)

    setReady(false)

  },1000)

 

  

 },[])


 //data.json 데이터는 state에 담기므로 상태에서 꺼내옴

 let tip = state.tip;

 let todayWeather = 10 + 17;

 let todayCondition = "흐림"

 //return 구문 밖에서는 슬래시 두개 방식으로 주석

 return ready ? <Loading/> : (

  /*

   return 구문 안에서는 {슬래시 + * 방식으로 주석

  */

  <ScrollView style={styles.container}>

   <Text style={styles.title}>나만의 꿀팁</Text>

    <Text style={styles.weather}>오늘의 날씨: {todayWeather + '°C ' + todayCondition} </Text>

   <Image style={styles.mainImage} source={{uri:main}}/>

   <ScrollView style={styles.middleContainer} horizontal indicatorStyle={"white"}>

    <TouchableOpacity style={styles.middleButton01}><Text style={styles.middleButtonText}>생활</Text></TouchableOpacity>

    <TouchableOpacity style={styles.middleButton02}><Text style={styles.middleButtonText}>재테크</Text></TouchableOpacity>

    <TouchableOpacity style={styles.middleButton03}><Text style={styles.middleButtonText}>반려견</Text></TouchableOpacity>

    <TouchableOpacity style={styles.middleButton04}><Text style={styles.middleButtonText}>꿀팁 찜</Text></TouchableOpacity>

   </ScrollView>

   <View style={styles.cardContainer}>

     {/* 하나의 카드 영역을 나타내는 View */}

     {

     tip.map((content,i)=>{

      return (<Card content={content} key={i}/>)

     })

    }

    

   </View>

  

  </ScrollView>)

}


const styles = StyleSheet.create({

 container: {

  //앱의 배경 색

  backgroundColor: '#fff',

 },

 title: {

  //폰트 사이즈

  fontSize: 20,

  //폰트 두께

  fontWeight: '700',

  //위 공간으로 부터 이격

  marginTop:50,

  //왼쪽 공간으로 부터 이격

  marginLeft:20

 },

 weather:{

  alignSelf:"flex-end",

  paddingRight:20

 },

 mainImage: {

  //컨텐츠의 넓이 값

  width:'90%',

  //컨텐츠의 높이 값

  height:200,

  //컨텐츠의 모서리 구부리기

  borderRadius:10,

  marginTop:20,

  //컨텐츠 자체가 앱에서 어떤 곳에 위치시킬지 결정(정렬기능)

  //각 속성의 값들은 공식문서에 고대로~ 나와 있음

  alignSelf:"center"

 },

 middleContainer:{

  marginTop:20,

  marginLeft:10,

  height:60

 },

 middleButton01: {

  width:100,

  height:50,

  padding:15,

  backgroundColor:"#fdc453",

  borderColor:"deeppink",

  borderRadius:15,

  margin:7

 },

 middleButton02: {

  width:100,

  height:50,

  padding:15,

  backgroundColor:"#fe8d6f",

  borderRadius:15,

  margin:7

 },

 middleButton03: {

  width:100,

  height:50,

  padding:15,

  backgroundColor:"#9adbc5",

  borderRadius:15,

  margin:7

 },

 middleButtonText: {

  color:"#fff",

  fontWeight:"700",

  //텍스트의 현재 위치에서의 정렬

  textAlign:"center"

 },

 middleButton04: {

  width:100,

  height:50,

  padding:15,

  backgroundColor:"#f886a8",

  borderRadius:15,

  margin:7

 },

 cardContainer: {

  marginTop:10,

  marginLeft:10

 },

 card:{

  flex:1,

  //컨텐츠들을 가로로 나열

  //세로로 나열은 column <- 디폴트 값임

  flexDirection:"row",

  margin:10,

  borderBottomWidth:0.5,

  borderBottomColor:"#eee",

  paddingBottom:10


 },

 cardImage: {

  flex:1,

  width:100,

  height:100,

  borderRadius:10,

 },

 cardText: {

  flex:2,

  flexDirection:"column",

  marginLeft:10,

 },

 cardTitle: {

  fontSize:20,

  fontWeight:"700"

 },

 cardDesc: {

  fontSize:15

 },

 cardDate: {

  fontSize:10,

  color:"#A6A6A6",

 },



});



---------------------------------------------------------------------------------------------------------


App.js



import React from 'react'

import MainPage from './pages/MainPage';

import AboutPage from './pages/AboutPage';


export default function App(){

 // return (<MainPage/>)

 return (<DetailPage/>)

}

취소
 공유
취소
댓글 0
댓글 알림
나의얼굴