আমি কীভাবে একটি প্রতিক্রিয়ার অ্যাপে ফায়ারস্টোর টাইমস্ট্যাম্পটি প্রদর্শন করব তা বোঝার চেষ্টা করছি।
আমার তৈরি ফ্যাট সহ একটি ফায়ার স্টোর ডকুমেন্ট রয়েছে।
আমি এটিকে আউটপুটের তালিকায় অন্তর্ভুক্ত করার চেষ্টা করছি (এখানে প্রাসঙ্গিক বিটগুলি বের করা হচ্ছে যাতে আপনাকে ক্ষেত্রগুলির পুরো তালিকার মধ্যে পড়তে না হয়)।
componentDidMount() {
this.setState({ loading: true });
this.unsubscribe = this.props.firebase
.users()
.onSnapshot(snapshot => {
let users = [];
snapshot.forEach(doc =>
users.push({ ...doc.data(), uid: doc.id }),
);
this.setState({
users,
loading: false,
});
});
}
componentWillUnmount() {
this.unsubscribe();
}
render() {
const { users, loading } = this.state;
return (
<div>
{loading && <div>Loading ...</div>}
{users.map(user => (
<Paragraph key={user.uid}>
<key={user.uid}>
{user.email}
{user.name}
{user.createdAt.toDate()}
{user.createdAt.toDate}
{user.createdAt.toDate()).toDateString()}
একমাত্র বৈশিষ্ট্য যা রেন্ডার করে না তা হ'ল তারিখ।
উপরোক্ত প্রতিটি প্রয়াসই ত্রুটি উত্পন্ন করে যা বলে:
প্রকারের ত্রুটি: অনির্ধারিত সম্পত্তি 'টু ডেট' পড়তে পারে না
আমি এই পোস্টটি , এবং এই পোস্টটি এবং এই পোস্টটি , এবং এই পোস্টটি এবং তাদের মতো অন্যদের দেখেছি, যা পরামর্শ দেয় যে টুডেট () কাজ করা উচিত। তবে - এই এক্সটেনশনটি আমার জন্য ত্রুটি ছুঁড়েছে - আমি যখন টস্ট্রিং এক্সটেনশনের চেষ্টা করি তখন including
আমি জানি এটি ফায়ার স্টোরে কিছু আছে বলে আমি জানি কারণ যখন আমি ব্যবহারকারীকে তৈরি করা চেষ্টা করি তখন আমার মনে হয় একটি ত্রুটি পেয়ে যায় যে এটিতে এটি কয়েক সেকেন্ডের সাথে খুঁজে পেয়েছিল।
নীচে ওয়েলমাসের উদাহরণ গ্রহণ করে আমি এই ক্ষেত্রের আউটপুটটিকে লগ করার চেষ্টা করেছি:
this.db.collection('users').doc('HnH5TeCU1lUjeTqAYJ34ycjt78w22').get().then(function(doc) {
console.log(doc.data().createdAt.toDate());
}
আমি আমার মানচিত্রের বিবৃতিতে এটি যুক্ত করার চেষ্টাও করেছি তবে একটি ত্রুটি পেয়েছে যা বলেছে যে ইউজার.জেট কোনও কাজ নয়।
{user.get().then(function(doc) {
console.log(doc.data().createdAt.toDate());}
)}
এটি উপরের মতো একই ত্রুটি বার্তা উত্পন্ন করে।
পরবর্তী মনোযোগ
একটি অদ্ভুত জিনিস যা ফায়ার স্টোরে একটি তারিখ রেকর্ড করার উপায় খুঁজতে চেষ্টা করেছে যা আমাকে তা আবার পড়তে দেয়, তা হ'ল আমি যখন এই সূত্রটি ব্যবহার করার জন্য আমার জমা হ্যান্ডলারটি এক ফর্মটিতে পরিবর্তন করি:
handleCreate = (event) => {
const { form } = this.formRef.props;
form.validateFields((err, values) => {
if (err) {
return;
};
const payload = {
name: values.name,
// createdAt: this.fieldValue.Timestamp()
// createdAt: this.props.firebase.fieldValue.serverTimestamp()
}
console.log("formvalues", payload);
// console.log(_firebase.fieldValue.serverTimestamp());
this.props.firebase
.doCreateUserWithEmailAndPassword(values.email, values.password)
.then(authUser => {
return this.props.firebase.user(authUser.user.uid).set(
{
name: values.name,
email: values.email,
createdAt: new Date()
// .toISOString()
// createdAt: this.props.firebase.fieldValue.serverTimestamp()
},
{ merge: true },
);
// console.log(this.props.firebase.fieldValue.serverTimestamp())
})
.then(() => {
return this.props.firebase.doSendEmailVerification();
})
// .then(() => {message.success("Success") })
.then(() => {
this.setState({ ...initialValues });
this.props.history.push(ROUTES.DASHBOARD);
})
});
event.preventDefault();
};
এটি ডাটাবেসে একটি তারিখ রেকর্ড করতে কাজ করে।
ফায়ারস্টোর প্রবেশের ফর্মটি দেখতে এই রকম:
আমি এই উপাদানটিতে একটি তারিখ প্রদর্শন করার চেষ্টা করছি:
class UserList extends Component {
constructor(props) {
super(props);
this.state = {
loading: false,
users: [],
};
}
componentDidMount() {
this.setState({ loading: true });
this.unsubscribe = this.props.firebase
.users()
.onSnapshot(snapshot => {
let users = [];
snapshot.forEach(doc =>
users.push({ ...doc.data(), uid: doc.id }),
);
this.setState({
users,
loading: false,
});
});
}
componentWillUnmount() {
this.unsubscribe();
}
render() {
const { users, loading } = this.state;
return (
<div>
{loading && <div>Loading ...</div>}
<List
itemLayout="horizontal"
dataSource={users}
renderItem={item => (
<List.Item key={item.uid}>
<List.Item.Meta
title={item.name}
description={item.organisation}
/>
{item.email}
{item.createdAt}
{item.createdAt.toDate()}
{item.createdAt.toDate().toISOString()}
</List.Item>
// )
)}
/>
</div>
);
}
}
export default withFirebase(UserList);
আমি যখন এটি আবার পড়ার চেষ্টা করি - ব্যবহার করে:
{Item.email}
ত্রুটি বার্তাটি পড়ে:
ত্রুটি: বস্তুগুলি প্রতিক্রিয়া শিশু হিসাবে বৈধ নয় (পাওয়া গেছে: টাইমস্ট্যাম্প (সেকেন্ড = 1576363035, ন্যানোসেকেন্ডস = 52000000))। যদি আপনি বাচ্চাদের সংগ্রহ সরবরাহ করতে চান, তবে পরিবর্তে একটি অ্যারে ব্যবহার করুন। আইটেমে (ইউজারআইডেক্স.জেএসএক্স: 74)
আমি যখন এই প্রচেষ্টাগুলির প্রত্যেকটি ব্যবহার করার চেষ্টা করি:
{item.createdAt}
{item.createdAt.toDate()}
{item.createdAt.toDate().toISOString()}
আমি একটি ত্রুটি পেয়েছি যা বলে:
প্রকারের ত্রুটি: অনির্ধারিত সম্পত্তি 'টু ডেট' পড়তে পারে না
অন্যান্য ক্ষেত্রে একই ডকুমেন্টে লগইন করা এন্ট্রিগুলি পুনরায় পড়ার দক্ষতার উপর ভিত্তি করে, আমি আশা করি যে এটির যে কোনওটি আউটপুট তৈরির জন্য কাজ করবে - যদি এটি আমার ইচ্ছা মতো ফর্ম্যাট না হয়। তা হয় না।
পরবর্তী মনোযোগ
ওয়েলমাসের উদাহরণ গ্রহণ করে, আমি নির্দেশাবলী অনুসরণ করার চেষ্টা করেছি, তবে যেখানে আমরা একই প্রতিক্রিয়া পাচ্ছি না তা প্রথম পদক্ষেপে। টো ডেট () এক্সটেনশনের উপর ভিত্তি করে ওয়ালামাস যেখানে আউটপুট পায় সেখানে টো ডেট () কোনও ফাংশন নয় বলে আমি ত্রুটি পেয়েছি।
ফায়ারবেস ডকুমেন্টেশনের সাথে সামঞ্জস্য রেখে আমি চেষ্টা করেছি:
const docRef = this.props.firebase.db.collection("users").doc("HnH5TeCU1lUjeTqAYJ34ycjt78w22");
docRef.get().then(function(docRef) {
if (doc.exists) {
console.log("Document createdAt:", docRef.createdAt.toDate());
}})
এটি সিনট্যাক্সের সাথে ত্রুটির একটি স্ট্রিং তৈরি করে এবং আমি তাদের কাছাকাছি কোনও উপায় খুঁজে পাচ্ছি না।
পরবর্তী মনোযোগ
আমি তখন ব্যবহারকারীদের ফর্মটির প্রমাণীকরণের দিকটি ছাড়াই এটি অন্বেষণ করতে পারি কিনা তা দেখার জন্য একটি নতুন ফর্ম তৈরি করার চেষ্টা করেছি।
আমার একটি ফর্ম রয়েছে যা ইনপুট হিসাবে গ্রহণ করে:
this.props.firebase.db.collection("insights").add({
title: title,
text: text,
// createdAt1: new Date(),
createdAt: this.props.firebase.fieldValue.serverTimestamp()
})
পূর্ববর্তী ফর্মটিতে, নতুন তারিখ () প্রয়াস ডাটাবেসে একটি তারিখ রেকর্ড করার জন্য কাজ করেছিল, উদাহরণস্বরূপ, তৈরিআউট এবং তৈরিএটি 1 উভয় ক্ষেত্র একই ডাটাবেস এন্ট্রি উত্পন্ন করে:
<div>{item.createdAt.toDate()}</div>
<div>{item.createdAt.toDate()}</div>
আমি যখন তারিখগুলির মান আউটপুট দেওয়ার চেষ্টা করি, প্রথমটি একটি ত্রুটি উত্পন্ন করে যা বলে:
প্রতিক্রিয়া সন্তানের হিসাবে অবজেক্টগুলি বৈধ নয় (পাওয়া গেছে: সান ডিসেম্বর 15 2019 21:33:32 GMT + 1100 (অস্ট্রেলিয়ান পূর্ব দিনের আলো সময়))। যদি আপনি বাচ্চাদের সংগ্রহ সরবরাহ করতে চান, তবে পরিবর্তে একটি অ্যারে ব্যবহার করুন
দ্বিতীয়টি বলে ত্রুটি উত্পন্ন করে:
প্রকারের ত্রুটি: অনির্ধারিত সম্পত্তি 'টু ডেট' পড়তে পারে না
পরবর্তী কী চেষ্টা করা যায় সে সম্পর্কে আমি ধারণার জন্য আটকে আছি।
আমি এই পোস্টটি দেখেছি যা নীচে সুপারিশ করে যে কার্যকর কিছু করতে পারে:
{item.createdAt1.Date.valueOf()}
এটা হয় না। এটি এমন একটি ত্রুটি সরবরাহ করে যা বলে:
প্রকারের ত্রুটি: অপরিজ্ঞাপিতের সম্পত্তি 'তারিখ' পড়তে পারে না
এই পোস্টটি আমার মতো একই সমস্যা হচ্ছে বলে মনে হচ্ছে, তবে তারা কীভাবে তারা সঞ্চিত তারিখের মান প্রদর্শন করতে পরিচালিত হয়েছিল তা doesn't
এই পোস্টটি অ্যারের ত্রুটি বার্তায় আটকে যাচ্ছে বলে মনে হচ্ছে, তবে কীভাবে তৈরিডেট টু ডেট () ব্যবহার করে একটি তারিখ প্রদর্শন করবেন তা নির্ধারণ করেছেন