Prop Types

Componentleri çağırırken göndermiş olduğumuz propertylerin veri türlerini componentin içinde belirleyebiliyoruz. Yani title componenti text prop u için string almalıdır şeklinde tanımlamalar yapabiliriz.

Prop Type amacı component hazırladınız ve bunu paylaştınız, hangi property ye hangi tipte veri göndermeleri gerektiğini izah etmemiz gerekir.

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

import PropTypes from "prop-types";

const Title = ({ isVisible, text, color, numberOfLines }) => {
  return (
    <>
      <View>
        {isVisible && (
          <Text style={[styles.title, { color: color }]}>
            {numberOfLines} - {text}
          </Text>
        )}
      </View>
    </>
  );
};

const styles = StyleSheet.create({
  title: {
    fontSize: 30,
    fontWeight: 700,
  },
});

Title.propTypes = {
  text: PropTypes.string,
  number: PropTypes.number,
  color: PropTypes.string,
  isVisible: PropTypes.bool,
};

export default Title;
import { View, Text } from "react-native";
import React from "react";
import PropTypes from "prop-types";

const User = ({ data }) => {
  return (
    <View>
      <Text>{JSON.stringify(data, null, 2)}</Text>
    </View>
  );
};

User.propTypes = {
  data: PropTypes.shape({
    id: PropTypes.number,
    name: PropTypes.string,
  }),

  //   data: PropTypes.exact({ sadece şu fieldlar olmalı dersek exact komutu kullanılır.
  //     id: PropTypes.number,
  //     name: PropTypes.string,
  //   }),
};

export default User;
import { View, Text } from "react-native";
import React from "react";

import PropTypes from "prop-types";

const Users = ({ data }) => {
  return (
    <View>
      <Text>{JSON.stringify(data, null, 2)}</Text>
    </View>
  );
};

Users.propTypes = {
  data: PropTypes.array,
};

export default Users;
import { StyleSheet, View } from "react-native";

import Title from "./src/components/Title";
import User from "./src/components/User";
import Header from "./src/components/Header";
import Users from "./src/components/Users";

const App = () => {
  return (
    <View style={styles.container}>
      <Header />
      <Title
        text="React Native"
        color="red"
        number={1}
        numberOfLines={1}
        isVisible={true}
      />
      <Title text="React" color="blue" number={2} numberOfLines={2} />
      <Title text="JavaScript" color="green" number={3} numberOfLines={3} />

      <User data={{ id: 1, name: "Mehmet" }} />

      <Users data={["Ahmer", "Mehmet", "Ayşe", "Fatma"]} />
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
});

export default App;

https://legacy.reactjs.org/docs/typechecking-with-proptypes.html

User componenti içinde yer alan data nin id ve name inin de type ları için PropType tanımlaması yapabiliriz.

<User data={{ id: 1, name: "Mehmet" }} /> //ifadesine surname eklenirse
<User data={{ id: 1, name: "Mehmet", surname: "Seven" }} /> //ifadesine surname eklenirse herhangi bir hata almayız (shape kullandığımız için)

//Biz bir object bekliyoruz ama bu object mutlaka şu formatta, sadece belirlenen fieldlar olmalı diyebilirsiniz; bunun için shape yerine exact tanımı kullanılır.

User.propTypes = {
  data: PropTypes.exact({
    id: PropTypes.number,
    name: PropTypes.string,
  }),
};

props tanımlarını defalarca yazmak yerine bu şekilde de kullanabiliriz.

İnternet sitesi https://abdullahsarihan.com
Yazı oluşturuldu 108

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.