Использование реквизита React.js в «сочинении» Redux

Я использую react-redux-firebase и firestoreConnect, чтобы получить информацию из моей базы данных и сопоставить ее с реквизитами через их готовый редуктор. Чтобы связать его информацию с моим компонентом, я использую метод «compose» следующим образом:

export default compose(
   connect(mapStateToProps, mapDispatchToProps),
   firestoreConnect([
      {
         collection: 'questions',
         doc: this.props.match.params.id,
         subcollection: 'messages',
      }
   ])
)(QuestionDetail);

Как видите, я пытаюсь получить доступ к определенному документу с идентификатором, который был передан компоненту в качестве реквизита от его родителя. Однако «это» не определено в контексте «составить», и поэтому я не могу использовать его для доступа к реквизитам и моему параметру.

Есть ли другой способ получить доступ к идентификатору, переданному компоненту, чтобы я мог запросить его в Firestore?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
1 325
2

Ответы 2

После более глубокого поиска в документации я обнаружил, что вы можете передавать реквизиты функции firestoreConnect (обратите внимание, что я неправильно запрашивал подколлекции). Код заканчивается:

export default compose(
   connect(mapStateToProps, mapDispatchToProps),
   firestoreConnect((props) => [
      {
         collection: 'questions',
         doc: props.match.params.id,
         subcollections: [{ collection: 'messages' }],
      }
   ])
)(QuestionDetail);

Он должен работать в более старой версии react-router.

Но я предполагаю, что вы используете последнюю версию React Router (v4+). Таким образом, вы должны обернуть весь компонент компонентом более высокого порядка withRouter. Он будет передавать обновленные реквизиты соответствия, местоположения и истории обернутому компоненту при каждом его рендеринге.

Сначала вам нужно импортировать файл withRouter.

import { withRouter } from "react-router";

Затем вы должны обернуть его withRouter.

export default withRouter(compose(
   connect(mapStateToProps, mapDispatchToProps),
   firestoreConnect((props) => 
      [{
         collection: 'questions',
         doc: props.match.params.id,
         subcollections: [{ collection: 'messages' }],
      }]
      ))(QuestionDetail));

Это работает для меня.

Другие вопросы по теме