मैं यह जानने की कोशिश कर रहा हूं कि रिएक्शन ऐप में फायरस्टार टाइमस्टैम्प को कैसे प्रदर्शित किया जाए।
मेरे पास एक फायरस्टार डॉक्यूमेंट है, जिसका नाम createAt है।
मैं इसे आउटपुट की सूची में शामिल करने की कोशिश कर रहा हूं (प्रासंगिक बिट्स को यहां हटा रहा हूं ताकि आपको फ़ील्ड की पूरी सूची के माध्यम से पढ़ना न पड़े)।
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()}
एकमात्र विशेषता जो रेंडर नहीं करेगी वह तारीख है।
उपरोक्त प्रत्येक प्रयास में एक त्रुटि उत्पन्न होती है जो कहती है:
TypeError: अपरिभाषित की संपत्ति 'toate' नहीं पढ़ सकता है
मैंने इस पोस्ट को , और इस पोस्ट और इस पोस्ट को , और इस पोस्ट को और उन जैसे अन्य लोगों को देखा है, जो सुझाव देते हैं कि काम करना चाहिए () काम करना चाहिए। लेकिन - यह एक्सटेंशन मेरे लिए एक त्रुटि फेंकता है - जब मैं स्ट्रॉन्ग एक्सटेंशन की कोशिश करता हूं।
मुझे पता है कि फायरस्टार में कुछ है क्योंकि जब मैं user.createdAt की कोशिश करता हूं, तो मुझे यह कहते हुए एक त्रुटि मिलती है कि इसमें सेकंड के साथ एक ऑब्जेक्ट मिला।
नीचे दिए गए वेलेमास से उदाहरण लेते हुए, मैंने क्षेत्र के आउटपुट को लॉग इन करने की कोशिश की:
this.db.collection('users').doc('HnH5TeCU1lUjeTqAYJ34ycjt78w22').get().then(function(doc) {
console.log(doc.data().createdAt.toDate());
}
मैंने इसे अपने मैप स्टेटमेंट में जोड़ने की भी कोशिश की, लेकिन एक त्रुटि मिली जो कहती है कि user.get एक फ़ंक्शन नहीं है।
{user.get().then(function(doc) {
console.log(doc.data().createdAt.toDate());}
)}
यह ऊपर के समान त्रुटि संदेश उत्पन्न करता है।
अगले ATTEMPT
फायरस्टार में एक तारीख दर्ज करने का एक तरीका खोजने की कोशिश में एक अजीब बात सामने आई है जो मुझे इसे वापस पढ़ने की अनुमति देती है, वह यह है कि जब मैं इस फॉर्मूलेशन का उपयोग करने के लिए एक रूप में अपना सबमिट हैंडलर बदलता हूं:
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))। यदि आप बच्चों के संग्रह को प्रस्तुत करना चाहते हैं, तो इसके बजाय एक सरणी का उपयोग करें। आइटम में (UserIndex.jsx पर: 74)
जब मैं इनमें से प्रत्येक प्रयास का उपयोग कर रहा हूं:
{item.createdAt}
{item.createdAt.toDate()}
{item.createdAt.toDate().toISOString()}
मुझे एक त्रुटि मिलती है जो कहती है:
TypeError: अपरिभाषित की संपत्ति 'toate' नहीं पढ़ सकता है
अन्य क्षेत्रों में एक ही दस्तावेज़ में लॉग की गई प्रविष्टियों को वापस पढ़ने की क्षमता के आधार पर, मैं उम्मीद कर रहा हूं कि इनमें से कोई भी आउटपुट का उत्पादन करने के लिए काम करे, अगर यह मेरे इच्छित तरीके से स्वरूपित न हो। ऐसा नहीं होता है।
अगले ATTEMPT
वेलामास का उदाहरण लेते हुए, मैंने निर्देशों का पालन करने की कोशिश की, लेकिन जहां हमें वही प्रतिक्रिया नहीं मिल रही है, वह पहले चरण में है। जहां वालमेस को .toDate () एक्सटेंशन के आधार पर आउटपुट मिलता है, मुझे एक त्रुटि मिलती है जिसमें कहा जाता है कि टॉड () एक फ़ंक्शन नहीं है।
Firebase प्रलेखन के अनुरूप, मैंने कोशिश की:
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());
}})
यह वाक्य रचना के साथ त्रुटियों की एक स्ट्रिंग पैदा करता है और मैं उनके आसपास एक रास्ता नहीं खोज सकता।
अगले ATTEMPT
फिर मैंने यह देखने के लिए एक नया रूप बनाने की कोशिश की कि क्या मैं उपयोगकर्ताओं के फॉर्म के प्रमाणीकरण पहलू के बिना यह पता लगा सकता हूं।
मेरे पास एक फॉर्म है जो इनपुट के रूप में लेता है:
this.props.firebase.db.collection("insights").add({
title: title,
text: text,
// createdAt1: new Date(),
createdAt: this.props.firebase.fieldValue.serverTimestamp()
})
जहां पिछले रूप में, नया दिनांक () प्रयास डेटाबेस में एक तारीख दर्ज करने के लिए काम करता है, इस उदाहरण में createAt और createAt1 दोनों फ़ील्ड समान डेटाबेस प्रविष्टि उत्पन्न करते हैं:
<div>{item.createdAt.toDate()}</div>
<div>{item.createdAt.toDate()}</div>
जब मैं तारीखों के मूल्य को आउटपुट करने की कोशिश करता हूं, तो पहले वाला एक त्रुटि उत्पन्न करता है जो कहता है:
ऑब्जेक्ट एक रिएक्ट बच्चे के रूप में मान्य नहीं हैं (पाया गया: सन 15 दिसंबर 2019 21:33:32 GMT + 1100 (ऑस्ट्रेलियाई पूर्वी डेलाइट समय))। यदि आप बच्चों के संग्रह को प्रस्तुत करना चाहते हैं, तो इसके बजाय एक सरणी का उपयोग करें
दूसरा यह कहते हुए त्रुटि उत्पन्न करता है:
TypeError: अपरिभाषित की संपत्ति 'toate' नहीं पढ़ सकता है
मैं विचारों के लिए फंस गया हूं कि आगे क्या करना है।
मैंने इस पोस्ट को देखा जो बताता है कि निम्नलिखित कुछ उपयोगी हो सकता है:
{item.createdAt1.Date.valueOf()}
यह नहीं है यह कहता है कि एक त्रुटि प्रदान करता है:
TypeError: अपरिभाषित की संपत्ति 'तारीख' नहीं पढ़ सकता है
इस पोस्ट से मुझे भी उतना ही परेशानी हो रही है, लेकिन वे इस बात पर ध्यान नहीं देते हैं कि वे अपने द्वारा संग्रहित दिनांक मान को प्रदर्शित करने में कैसे कामयाब रहे।
यह पोस्ट ऐरे एरर मैसेज पर अटकती दिख रही है, लेकिन लगता है कि कैसे बनाया गया।