#reactjs #firebase #react-router
#reactjs #firebase #react-router
Вопрос:
У меня есть приложение, которое извлекает сообщения и их теги из Firebase Firestore и использует React Router для навигации. Когда я нажимаю тег для просмотра сообщений с этим тегом (например root.com/tags/food ) отображение сообщений о еде. Если я затем щелкну другой тег (например root.com/tags/travel ) поскольку мы уже находимся на странице «теги», маршрутизатор не выполняет повторную выборку страницы. Как мне правильно это сделать? (В настоящее время я не использую Redux и предлагаемое решение, ‘componentWillRecieveProps’ теперь обесценивается). Я использую функциональные компоненты.
Настройка
У меня есть компонент TagList, который получает список (интерактивных) тегов из Firestore, компонент Feed, который показывает список сообщений, и компонент TagFeed, который показывает список сообщений при нажатии на определенный тег в компоненте TagList, при этом React Router чередует их, используя «сопоставление» сполучите тег.
Список тегов, например
{ docs amp;amp; docs.map(doc => (
<ul key={doc.id}>
<li>
<button>
<Link to={`/tag/${doc.myTag}`}>
{doc.myTag}
</Link>
</button>
</li>
</ul>
))}
TagFeed.js
const TagFeed = ({match}) => {
const theTag = match.params.tag;
....
useEffect(() => {
const getTags = projectFirestore.collection(collection)
.orderBy('createdAt', 'desc')
.where("myTag", "==", `${theTag}`)
....
Настройка маршрутизатора в App.js
<BrowserRouter>
<Nav/>
<PostForm/>
<Tags/>
<Switch>
<Route path="/" exact component={Feed}/>
<Route path="/tag/:tag" exact component={TagFeed}/>
<Route path="/" render={() => <div>404</div>}/>
</Switch>
</BrowserRouter>
Итак, каждый раз, когда нажимается тег, вызывается компонент TagFeed, и параметр из URL передается в запрос Firebase, но компонент TagFeed не вызывается снова, если мы его уже просматриваем.
Спасибо за вашу помощь.
Комментарии:
1.
tag
Параметр должен быть зависимостью дляuseEffect
того, который получает новые данные из FB и обновляет состояние. Таким образом, он будет запускаться при каждом изменении тега2. Блестяще, спасибо @Jayce444, это работает. При компиляции выводится сообщение «React Hook useEffect имеет ненужную зависимость: ‘theTag'» — могу ли я просто игнорировать это?
3. Ваш синтаксис для объявления переменной тега и
useEffect
, вероятно, не совсем правильный, поскольку этого предупреждения не должно быть. Но технически да, если он работает, вы можете просто игнорировать его.4. @Jayce444 Ха, да, наверное. 👍🏻Еще раз спасибо, очень признателен.