#javascript #reactjs #redux
#javascript #reactjs #сокращение
Вопрос:
Это мой Index.js
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<Router>
<App className="app-main" />
</Router>
</Provider>
</React.StrictMode>,
document.getElementById('root')
);
И вот App.jsx
<Switch>
appRoutes.map(route =>
<Route path={route.path} component={route.component} key={route.key}/>
)}
</Switch>
<BottomNav />
Я хочу отобразить компонент BottomNav в определенных маршрутах, в которых они также являются некоторыми вспомогательными маршрутами. Я использовал withRouter в нижней навигации, но его соответствие — это просто «/», и у меня есть доступ только к местоположению. Для меня недостаточно местоположения, потому что, как я уже сказал, в этих маршрутах есть несколько дополнительных маршрутов. Так, например, в маршруте профиля у меня есть действия и друзья. я хочу отобразить BottomNav в профиле / друзьях, но не в профиле / действиях, как я могу этого добиться. Мое решение состояло в том, чтобы установить текущий путь маршрута в redux и передать его в bottom nav и проверить, есть ли он в допустимых маршрутах. я отображаю bottom nav, но я не могу писать и повторять функцию в течение определенного времени в разных представлениях, когда они монтируют обновление текущего маршрута в redux. Я забыл сказать, что я новичок в React, пожалуйста, будьте осторожны и подробно объясните tnx 🙂
Комментарии:
1. Почему бы вам просто не добавить компонент BottomNav на нужные вам экраны? Должен ли он быть выше в дереве?
2. я пробовал это, но это навигационный компонент и имеет анимацию, если эта страница соответствует навигационным ссылкам. поэтому, если страница изменяет анимацию, прерывается. 🙁
3. Хорошо 🙂 Тогда я попробую предложить
Ответ №1:
Я не тестировал его, просто вывел его из головы. Идея заключается в том, что вы создаете карту маршрутов, на которых должен отображаться ваш BottomNav. В противном случае просто верните null .
import {withRouter} from 'react-router-dom'
const ROUTES_WITH_BOTTOM_NAV = {
'/home': true,
'/profile/friends': true
}
const BottomNav = (props) => {
const currentPage = props.location.pathname;
if (!ROUTES_WITH_BOTTOM_NAV[currentPage]) return null;
return (...yourBottomNavJsx)
}
export const withRouter(BottomNav)
Дайте мне знать, если это помогло.