শ্রেণীর উপাদান সহ ডিফল্ট প্রপস
ব্যবহার static defaultPropsসঠিক। আপনার প্রপস এবং রাজ্যের জন্য ক্লাস নয়, ইন্টারফেস ব্যবহার করা উচিত।
2018/12/1 আপডেট করুন : টাইপস্ক্রিপ্ট সময়ের সাথে সম্পর্কিত টাইপ-চেকিংয়ের উন্নতি করেছে defaultProps। পুরানো ব্যবহার এবং ইস্যুগুলির সর্বশেষতম এবং সর্বাধিক ব্যবহারের জন্য পড়ুন।
টাইপস্ক্রিপ্ট 3.0.০ এবং এর জন্য
আপনি কীভাবে আশা করবেন টাইপ-চেকিংয়ের কাজটি করার জন্য টাইপস্ক্রিপ্ট সুনির্দিষ্টভাবে সমর্থন যুক্ত করেছেdefaultProps । উদাহরণ:
interface PageProps {
foo: string;
bar: string;
}
export class PageComponent extends React.Component<PageProps, {}> {
public static defaultProps = {
foo: "default"
};
public render(): JSX.Element {
return (
<span>Hello, { this.props.foo.toUpperCase() }</span>
);
}
}
যা কোনও fooগুণাবলী পাস না করে রেন্ডার এবং সংকলন করা যেতে পারে :
<PageComponent bar={ "hello" } />
মনে রাখবেন যে:
fooহয় না ঐচ্ছিক হিসাবে চিহ্নিত (অর্থাত foo?: string) যদিও এটি একটি JSX অ্যাট্রিবিউট হিসাবে প্রয়োজনীয় না। Alচ্ছিক হিসাবে চিহ্নিত করার অর্থ হ'ল এটি হতে পারে undefinedতবে বাস্তবে এটি কখনও হবে না undefinedকারণ defaultPropsএকটি ডিফল্ট মান সরবরাহ করে। এটি কীভাবে আপনি কোনও ফাংশন প্যারামিটারটিকে alচ্ছিক বা ডিফল্ট মান সহ চিহ্নিত করতে পারেন তার অনুরূপ চিন্তা করুন , তবে উভয়ই নয়, তবুও উভয়েরই অর্থ কলটির কোনও মান নির্দিষ্ট করার দরকার নেই । টাইপসক্রিপ্ট 3.0+ defaultPropsএকইভাবে আচরণ করে , যা প্রতিক্রিয়া ব্যবহারকারীদের জন্য সত্যিই দুর্দান্ত!
defaultPropsকোন স্পষ্ট টাইপ টীকা হয়েছে। কোনটি জেএসএক্স বৈশিষ্ট্য প্রয়োজন তা নির্ধারণ করতে এর ধরণটি সংকলক দ্বারা অনুমান করা হয় এবং ব্যবহৃত হয়। আপনি মেলে একটি সাব-সেট defaultProps: Pick<PageProps, "foo">নিশ্চিত করতে ব্যবহার করতে পারেন । এই সতর্কতার বিষয়ে আরও এখানে ব্যাখ্যা করা হয়েছে ।defaultPropsPageProps
- সঠিকভাবে কাজ করার জন্য এটির
@types/reactসংস্করণ প্রয়োজন 16.4.11।
টাইপস্ক্রিপ্ট ২.১ এর জন্য 3.0 পর্যন্ত until
টাইপ করা বিষয় 3.0 বাস্তবায়িত কম্পাইলার সমর্থন করার আগে জন্য defaultPropsআপনি এখনও এটা ব্যবহার করতে পারে, এবং এটা রানটাইম এ প্রতিক্রিয়া 100% কাজ করেন, কিন্তু টাইপ করা বিষয় থেকে শুধুমাত্র যখন চেক JSX বৈশিষ্ট্যাবলী আপনি চিহ্ন সাজসরঞ্জাম আছে সঙ্গে ঐচ্ছিক হিসাবে ডিফল্টে আছে চাই জন্য সাজসরঞ্জাম বিবেচিত ?। উদাহরণ:
interface PageProps {
foo?: string;
bar: number;
}
export class PageComponent extends React.Component<PageProps, {}> {
public static defaultProps: Partial<PageProps> = {
foo: "default"
};
public render(): JSX.Element {
return (
<span>Hello, world</span>
);
}
}
মনে রাখবেন যে:
- টিকা রচনা করা করার জন্য একটি ভাল ধারণা
defaultPropsসঙ্গে Partial<>যাতে এটি আপনার সাজসরঞ্জাম বিরুদ্ধে টাইপ-চেক, কিন্তু আপনি একটি ডিফল্ট মান, যা কোন জ্ঞান করে তোলে যেহেতু প্রয়োজনীয় বৈশিষ্ট্য একটি ডিফল্ট প্রয়োজন হয়না এমন প্রতিটি প্রয়োজনীয় সম্পত্তি সরবরাহ হবে না।
- ব্যবহার করার সময়
strictNullChecksমান this.props.fooহতে হবে possibly undefinedএবং একটি অ-নাল কথন (অর্থাত প্রয়োজন this.props.foo!) অথবা টাইপ-পাহারা (অর্থাত if (this.props.foo) ...মুছে ফেলার জন্য) undefined। এটি বিরক্তিকর কারণ ডিফল্ট প্রোপ মান মানে এটি আসলে কখনই সংজ্ঞায়িত হবে না তবে টিএস এই প্রবাহটি বুঝতে পারেনি। টিএস 3.0 এর জন্য সুস্পষ্ট সমর্থন যুক্ত করার অন্যতম প্রধান কারণ defaultProps।
টাইপস্ক্রিপ্টের আগে ২.১
এটি একইরকম কাজ করে তবে আপনার Partialধরণ নেই, সুতরাং Partial<>সমস্ত প্রয়োজনীয় প্রপসের জন্য কেবল ডিফল্ট মান সরবরাহ করুন বা সরবরাহ করুন (যদিও সেই ডিফল্টগুলি কখনই ব্যবহার করা হবে না) বা স্পষ্টত প্রকারের টীকা সম্পূর্ণরূপে বাদ দেওয়া উচিত।
আপনি ব্যবহার করতে পারেন defaultPropsহিসাবে ভাল ফাংশন উপাদান, কিন্তু আপনি আপনার ফাংশন টাইপ করতে হবে FunctionComponent( StatelessComponentমধ্যে @types/reactসংস্করণ সামনে 16.7.2) ইন্টারফেস যাতে টাইপ করা বিষয় জানে defaultPropsফাংশন করুন:
interface PageProps {
foo?: string;
bar: number;
}
const PageComponent: FunctionComponent<PageProps> = (props) => {
return (
<span>Hello, {props.foo}, {props.bar}</span>
);
};
PageComponent.defaultProps = {
foo: "default"
};
মনে রাখবেন যে আপনাকে Partial<PageProps>কোথাও ব্যবহার করতে হবে না কারণ FunctionComponent.defaultPropsইতিমধ্যে টিএস ২.১++ এ আংশিক হিসাবে নির্দিষ্ট করা আছে।
আর একটি দুর্দান্ত বিকল্প (এটিই আমি ব্যবহার করি) হ'ল আপনার propsপ্যারামিটারগুলি তৈরি করা এবং সরাসরি ডিফল্ট মান নির্ধারণ করা:
const PageComponent: FunctionComponent<PageProps> = ({foo = "default", bar}) => {
return (
<span>Hello, {foo}, {bar}</span>
);
};
তাহলে আপনার একেবারেই দরকার নেই defaultProps! সচেতন যে যদি আপনি হতে না প্রদান defaultProps, একটি ফাংশন উপাদান তে এটি ডিফল্ট পরামিতির মান বেশি প্রাধান্য নিতে হবে কারণ প্রতিক্রিয়া সবসময় স্পষ্টভাবে পাস হবে defaultProps(তাই পরামিতি undefined না হয়, এইভাবে ডিফল্ট প্যারামিটার আর কখনও ব্যবহৃত হয়।) সুতরাং আপনি ব্যবহার করতে চাই মান একটি বা অন্য, উভয় নয়।
static defaultPropsসঠিক. আপনি কি এই কোড পোস্ট করতে পারেন?