REDUX
Anda juga dapat menggunakan react-router-redux
yang 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 history
objeknya. 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-redux
pembantu 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 routerReducer
sepanjang 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 NavLink
tombol. Jika Anda menempuh jalan itu, Anda akan belajar bahwa metode koneksi Redux digunakan shouldComponentUpdate
. Dengan routerReducer
, Anda dapat menggunakan mapStateToProps
untuk 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 shouldComponentUpdate
dengan menghapus fungsi hubungkan dan lihat apakah itu memperbaiki masalah. Jika demikian, tarik routerReducer
dan 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
mapStateToProps
ataumapDispatchToProps
- 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