REDUX
Anda juga dapat menggunakan react-router-reduxyang memiliki goBack()dan push().
Berikut adalah paket sampler untuk itu:
Di titik masuk aplikasi Anda, Anda perlu ConnectedRouter, dan terkadang koneksi rumit untuk dihubungkan adalah historyobjeknya. Middleware Redux mendengarkan perubahan sejarah:
import React from 'react'
import { render } from 'react-dom'
import { ApolloProvider } from 'react-apollo'
import { Provider } from 'react-redux'
import { ConnectedRouter } from 'react-router-redux'
import client from './components/apolloClient'
import store, { history } from './store'
import Routes from './Routes'
import './index.css'
render(
<ApolloProvider client={client}>
<Provider store={store}>
<ConnectedRouter history={history}>
<Routes />
</ConnectedRouter>
</Provider>
</ApolloProvider>,
document.getElementById('root'),
)
Saya akan menunjukkan cara untuk menghubungkan history. Perhatikan bagaimana riwayat diimpor ke toko dan juga diekspor sebagai tunggal sehingga bisa digunakan di titik masuk aplikasi:
import { createStore, applyMiddleware, compose } from 'redux'
import { routerMiddleware } from 'react-router-redux'
import thunk from 'redux-thunk'
import createHistory from 'history/createBrowserHistory'
import rootReducer from './reducers'
export const history = createHistory()
const initialState = {}
const enhancers = []
const middleware = [thunk, routerMiddleware(history)]
if (process.env.NODE_ENV === 'development') {
const { devToolsExtension } = window
if (typeof devToolsExtension === 'function') {
enhancers.push(devToolsExtension())
}
}
const composedEnhancers = compose(applyMiddleware(...middleware), ...enhancers)
const store = createStore(rootReducer, initialState, composedEnhancers)
export default store
Blok contoh di atas menunjukkan bagaimana memuat react-router-reduxpembantu middleware yang menyelesaikan proses pengaturan.
Saya pikir bagian selanjutnya ini benar-benar ekstra, tetapi saya akan memasukkannya kalau-kalau seseorang di masa depan menemukan manfaat:
import { combineReducers } from 'redux'
import { routerReducer as routing } from 'react-router-redux'
export default combineReducers({
routing, form,
})
Saya menggunakan routerReducersepanjang waktu karena memungkinkan saya untuk memaksa memuat ulang Komponen yang biasanya tidak perlu dilakukan shouldComponentUpdate. Contoh yang jelas adalah ketika Anda memiliki Nav Bar yang seharusnya diperbarui ketika pengguna menekan NavLinktombol. Jika Anda menempuh jalan itu, Anda akan belajar bahwa metode koneksi Redux digunakan shouldComponentUpdate. Dengan routerReducer, Anda dapat menggunakan mapStateToPropsuntuk memetakan perubahan perutean ke Nav Bar, dan ini akan memicunya untuk memperbarui ketika objek riwayat berubah.
Seperti ini:
const mapStateToProps = ({ routing }) => ({ routing })
export default connect(mapStateToProps)(Nav)
Maafkan saya saat saya menambahkan beberapa kata kunci tambahan untuk orang-orang: jika komponen Anda tidak diperbarui dengan benar, selidiki shouldComponentUpdatedengan menghapus fungsi hubungkan dan lihat apakah itu memperbaiki masalah. Jika demikian, tarik routerReducerdan komponen akan diperbarui dengan benar saat URL berubah.
Sebagai penutup, setelah melakukan semua itu, Anda dapat menelepon goBack()atau push()kapan pun Anda mau!
Coba sekarang di beberapa komponen acak:
- Impor masuk
connect()
- Anda bahkan tidak membutuhkan
mapStateToPropsataumapDispatchToProps
- Impor goBack dan tekan dari
react-router-redux
- Panggilan
this.props.dispatch(goBack())
- Panggilan
this.props.dispatch(push('/sandwich'))
- Rasakan emosi positif
Jika Anda membutuhkan lebih banyak pengambilan sampel, lihat: https://www.npmjs.com/package/react-router-redux