Kullanıcı, bileşenimdeki bir düğmeyi tıkladığında durumdaki bir nesne kümesini filtrelemeye çalışıyorum. Filtrenin mantığı iyi çalışır, ancak bileşene geri döndüğünde, filtrelenmiş nesneler eksiktir ve bunun yerine özellik tanımsızdır. Bir yaşam döngüsü yöntemini kaçırıyor muyum?Tepki bileşeni değiştirildikten sonra yeniden oluşturulmuyor
tıklama etkinlik:
<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
}
bileşenli bir kap:
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))
})
filtreleme bir filtre olayları döner, farklı bir dosya, yer alır nesne. Bu mantıkta hata yok.
sorun: aşağıdaki fonksiyonu vardığında, "mesajlar" tanımsız. Bu arada, bir yerlerde, filtrelenmiş yazılar, bileşene geri dönmüyor.
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>
);
}
DÜZENLEME - Eyleminizi bağlanırken filtre işlevi
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
Daha önce yazdığım bir yazım hatası var, yukarıda değiştirdim. –
allPostsByFilter işlevini paylaşabilir misiniz? Belki geri dönmeyeceğiniz bir durum vardır. – vijayst
Yukarıdaki kodu ekledim. Her ne kadar sorun olduğunu düşünmüyorum. Sorun, updateFilter gönderiminde filtrenin durumunun güncellenmesidir, ancak bu durum 'mapStateToProps' uygulamasının tekrar çalıştırılmasına neden olmamakta, yani filtrelenmiş olaylar bunu gerçekten kullanıcıya yapmamaktadır. Kullanabileceğim bir yaşam döngüsü yöntemi olmalı. –