React Native/React Native_study

[리액트 네이티브를 다루는 기술 #1] 2장 컴포넌트 (p. 70 ~ 98)

bocoder
728x90
반응형

* React Native 관련 책이 드디어 출간되어 구매 하였고, 하나씩 따라하며 기초를 다시 한 번 학습하기 위함
* reference : https://book.naver.com/bookdb/book_detail.nhn?bid=21166160

@ List

* 2.1 나만의 컴포넌트 만들기
* 2.2 Props
* 2.3 defaultProps
* 2.4 JSX 문법
* 2.5 StyleSheet로 컴포넌트에 스타일 입히기
* 2.6 Props 객체 구조 분해 할당
* 2.7 useState Hook으로 상태 관리하기

 

@ Result

ios / android - 토글 버튼 클릭 전

 

ios / android - 토글 버튼 클릭 후

 

# App.js

import React, { useState } from "react";
import { SafeAreaView, Button } from "react-native";
import Box from "./components/Box";

const App = () => {
  const [visible, setVisible] = useState(true);
  const onPress = () => {
    setVisible(!visible);
  };

  return (
    <SafeAreaView>
      <Button title="토글 버튼" onPress={onPress} />
      {/* {visible ? <Box rounded={true} size="large" color="blue" /> : null} */}
      {visible && <Box rounded={true} size="large" color="blue" />}
    </SafeAreaView>
  );
};

export default App;


# component > Box.js

import React from "react";
import { View, StyleSheet } from "react-native";

function Box({ rounded, size, color }) {
  return (
    <View
      style={[
        styles.box,
        rounded && styles.rounded,
        sizes[size],
        { backgroundColor: color },
      ]}
    />
  );
}

Box.defaultProps = { size: "medium", color: "black" };

const styles = StyleSheet.create({
  box: {
    backgroundColor: "black",
  },
  rounded: {
    borderRadius: 16,
  },
  small: {
    width: 32,
    height: 32,
  },
  medium: {
    width: 64,
    height: 64,
  },
  large: {
    width: 128,
    height: 128,
  },
});

const sizes = {
  small: styles.small,
  medium: styles.medium,
  large: styles.large,
};

export default Box;

 

728x90
반응형