जब भी उपयोगकर्ता मेरे घटक पर बटन पर क्लिक करता है तो मैं राज्य में ऑब्जेक्ट्स का एक सेट फ़िल्टर करने का प्रयास कर रहा हूं। फ़िल्टरिंग का तर्क ठीक काम करता है, लेकिन जब यह घटक पर वापस आता है, तो फ़िल्टर की गई वस्तुएं गायब होती हैं और इसके बजाय संपत्ति अपरिभाषित होती है। क्या मुझे जीवन चक्र विधि याद आ रही है?प्रोप बदलने के बाद प्रतिक्रिया घटक पुन: प्रतिपादन नहीं
क्लिक करें घटना:
<div onClick={this.filterMyPosts}>My Posts</div>
...
<div>
{this.renderPosts()}
</div>
filterMyPosts
filterMyPosts() {
this.props.updateFilter("myPosts");
// filtering function uses switch statement based on strings to filter posts
}
घटक कंटेनर:
const mapStateToProps = (state) => {
return {currentUser: state.session.currentUser,
posts: allPostsByFilter(state.posts, state.filter, state.session.currentUser.id, state.bookmarks)}
};
const mapDispatchToProps = (dispatch) => ({
updateFilter: (filter) => dispatch(updateFilter(filter))
})
छानने के लिए एक अलग फ़ाइल है, जो एक में फ़िल्टर घटनाओं रिटर्न में जगह लेता है वस्तु। उस तर्क में कोई त्रुटि नहीं है।
समस्या: समय यह निम्नलिखित कार्य करने के लिए हो जाता है के द्वारा, "पोस्ट" अनिर्धारित रहता है। तो कहीं भी, फ़िल्टर की गई पोस्ट इसे घटक पर वापस नहीं ला रही हैं।
renderPosts() {
return (
<div className ="user-profile-posts">
<ul>
{Object.keys(this.props.posts).map(id => <PostIndexItem
key={`posts-index-item${id}`}
post={this.props.posts[id]}
user={true}
/>)}
</ul>
</div>
);
}
संपादित करें - फिल्टर समारोह
export const allPostsByFilter = (filter, currentUserId, posts) => {
switch (filter) {
case "myPosts":
let postKeys = Object.keys(posts).filter((id) => {
return(posts[id].user_id === currentUserId)
});
let userPosts = {}
postKeys.forEach((key) => userPosts[key] = posts[key])
let newPosts = {}
let postKeys = Object.keys(posts).filter((id) => {
return (Object.keys(userPosts).includes(id))
});
eventKeys.forEach((key) => newPosts[key] = posts[key])
return newPosts
default:
return posts
क्षमा करें कि पहले से एक टाइपो है, मैंने इसे ऊपर बदल दिया है। –
क्या आप allPostsByFilter फ़ंक्शन साझा कर सकते हैं? शायद, एक ऐसी स्थिति है जहां आप वापस नहीं आ रहे हैं। – vijayst
मैंने उपरोक्त कोड जोड़ा। हालांकि मुझे नहीं लगता कि यह मुद्दा है। मुद्दा अद्यतन है फ़िल्टर फ़िल्टर प्रेषण राज्य पर फ़िल्टर को अद्यतन कर रहा है, लेकिन यह 'mapStateToProps' को फिर से निष्पादित करने का कारण नहीं बना रहा है, जिसका अर्थ है फ़िल्टर किए गए ईवेंट कभी भी उपयोगकर्ता को वास्तव में नहीं बनाते हैं। मुझे लगता है कि कुछ लाइफसाइकिल विधि होनी चाहिए जो मैं उपयोग कर सकता हूं। –