React Router v4
С v4 React Router существует три подхода, которые вы можете предпринять для программной маршрутизации внутри компонентов.
- Используйте
withRouter
компонент более высокого порядка.- Используйте композицию и выведите
- Используйте
context
.Реагируйте Маршрутизатор в основном является оберткой вокруг библиотеки
history
.history
взаимодействует с браузеромwindow.history
для вас с его браузером и историями хэша. Он также обеспечивает историю памяти, которая полезна для сред, которые не имеют глобальной истории. Это особенно полезно в разработке мобильных приложений (react-native
) и модульном тестировании с помощью узла.Экземпляр
history
имеет два способа навигации:push
иreplace
. Если вы думаете оhistory
как о массиве посещенных мест,push
добавит новое место в массив, аreplace
заменит текущее местоположение в массиве новым. Обычно вы будете использовать методpush
во время навигации.В более ранних версиях React Router вам нужно было создать свой собственный экземпляр
history
, но в v4,
и
будут созданы для вас браузер, хэш и экземпляры памяти. React Router делает свойства и методы экземпляра
history
, связанные с вашим маршрутизатором, доступными через контекст под объектомrouter
.1. Используйте
withRouter
компонент более высокого порядкакод
withRouter
высшего порядка компонент будет впрыскиватьhistory
объект в качестве опоры компонента. Это позволяет вам получить доступ к методамpush
иreplace
, не имея дело сcontext
.import { withRouter } from 'react-router-dom' // this also works with react-router-native const Button = withRouter(({ history }) => ( ))
2. Используйте композицию и рендерите
Компонент
предназначен не только для сопоставления местоположений. Вы можете сделать беспроблемный маршрут, и он всегда будет соответствовать текущему местоположению. Компонент
передает те же реквизиты, что и
withRouter
, поэтому вы сможете получить доступ кhistory
методам с помощьюhistory
prop.import { Route } from 'react-router-dom' const Button = () => (
( )} /> ) 3. Используйте контекст *
* Но вы, вероятно, не должны
Последний вариант - это тот, который вы должны использовать, только если вам комфортно работать с моделью context React] , Хотя контекст является опцией, следует подчеркнуть, что контекст является нестабильным API, и в React есть раздел «Почему бы не использовать контекст в своей документации. Поэтому используйте на свой страх и риск!
const Button = (props, context) => ( ) // you need to specify the context type so that it // is available within the component Button.contextTypes = { history: React.PropTypes.shape({ push: React.PropTypes.func.isRequired }) }
1 и 2 являются простейшими вариантами для реализации, поэтому для большинства случаев использования они являются вашими лучшими ставками.
Вы можете использовать библиотеку RecyclerViewPager , в build.gradle
добавить:
compile 'com.github.lsjwzh.RecyclerViewPager: lib: v1.2.0@aar'
[119 ] xml:
<com.lsjwzh.widget.recyclerviewpager.RecyclerViewPager
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="15dp"
android:paddingRight="15dp"
app:rvp_triggerOffset="0.1"
app:rvp_singlePageFling="true"
android:clipToPadding="false"/>
код:
RecyclerViewPager mRecyclerView = (RecyclerViewPager) view.findViewById(R.id.list);
// setLayoutManager like normal RecyclerView, you do not need to change any thing.
LinearLayoutManager layout = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
mRecyclerView.setLayoutManager(layout);
//set adapter
//You just need to implement ViewPageAdapter by yourself like a normal RecyclerView.Adpater.
mRecyclerView.setAdapter(new RecyclerView.Adpater<X>());
// That is all.
Обновление
Добавьте это maven { url "https://jitpack.io" }
в build.gradle (уровень проекта) в allprojects->repositories
блок, ваш код должен выглядеть так:
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}