Передача реквизитов класса в mapStateToProps

#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 Спасибо! Не возражаете ли вы добавить свое решение в качестве редактирования в свой вопрос, чтобы оно было правильно отформатировано, чтобы его было легче читать будущим посетителям?