#react-native #react-redux
#react-native #react-redux
Вопрос:
У меня есть компонент, подключенный к хранилищу, один из реквизитов, передаваемых компоненту post
, является объектом. Я хочу передать post.id
mapStateToProps
, чтобы я мог следить за изменениями в массиве комментариев к сообщениям.
Вот что я пробовал до сих пор
const mapStateToProps = state => ({
myProfile: state.users.myProfile,
comments: state.activity.posts[this.postID].comments,
});
const mapStateToProps2 = state => {
const id = this.postID;
return {
myProfile: state.users.myProfile,
comments: state.activity.posts[id].comments,
};
};
кто-нибудь знает, могу ли я это сделать, есть идеи, как?
приветствия
РЕДАКТИРОВАТЬ Вот реализация, с которой я пошел в конце:
const mapStateToProps = (state, ownProps) => {
const { navigation } = ownProps;
const navPost = navigation.getParam('post', {});
const postComments = state.activity.posts.filter( post => post.id === navPost.id );
return {
myProfile: state.users.myProfile,
comments: postComments[0].comments,
};
};
Ответ №1:
this
Ключевое слово, скорее всего, ссылается на неправильную область и не может найти postId
.
Либо назначьте идентификатор в состоянии и получите к нему доступ, state.postId
либо передайте идентификатор свойствам компонента и используйте его следующим образом:
function mapStateToProps(state, ownProps) {
const { visibilityFilter } = state
const { id } = ownProps
const todo = getTodoById(state, id)
// component receives additionally:
return { todo, visibilityFilter }
}
// Later, in your application, a parent component renders:
;<ConnectedTodo id={123} />
// and your component receives props.id, props.todo, and props.visibilityFilter
Источник: https://react-redux.js.org/using-react-redux/connect-mapstate
Комментарии:
1. вы, сэр, суперзвезда. для тех, кто ищет мою окончательную реализацию
const mapStateToProps = (state, ownProps) => { const { navigation } = ownProps; const navPost = navigation.getParam('post', {}); const postComments = state.activity.posts.filter( post => post.id === navPost.id ); return { myProfile: state.users.myProfile, comments: postComments[0].comments, }; };
2. @virtualLast Спасибо! Не возражаете ли вы добавить свое решение в качестве редактирования в свой вопрос, чтобы оно было правильно отформатировано, чтобы его было легче читать будущим посетителям?