REDUX
คุณยังสามารถใช้react-router-redux
ที่มีgoBack()
และpush()
.
นี่คือชุดตัวอย่างสำหรับสิ่งนั้น:
ในจุดเริ่มต้นของแอปคุณจำเป็นต้องConnectedRouter
มีและบางครั้งการเชื่อมต่อที่ยุ่งยากในการเชื่อมต่อก็คือhistory
วัตถุ มิดเดิลแวร์ Redux รับฟังการเปลี่ยนแปลงประวัติ:
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'),
)
ฉันจะแสดงวิธีเชื่อมต่อไฟล์history
. สังเกตว่าประวัติถูกนำเข้ามาในร้านค้าอย่างไรและยังส่งออกเป็นซิงเกิลตันเพื่อให้สามารถใช้ในจุดเริ่มต้นของแอปได้:
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
บล็อกตัวอย่างข้างต้นแสดงวิธีโหลดตัวreact-router-redux
ช่วยมิดเดิลแวร์ซึ่งเสร็จสิ้นกระบวนการตั้งค่า
ฉันคิดว่าส่วนต่อไปนี้เป็นส่วนพิเศษอย่างสมบูรณ์ แต่ฉันจะรวมไว้ในกรณีที่มีคนพบประโยชน์ในอนาคต:
import { combineReducers } from 'redux'
import { routerReducer as routing } from 'react-router-redux'
export default combineReducers({
routing, form,
})
ฉันใช้routerReducer
ตลอดเวลาเพราะมันช่วยให้ฉันบังคับโหลดส่วนประกอบที่ปกติไม่ได้เกิดจากshouldComponentUpdate
. ตัวอย่างที่เห็นได้ชัดคือเมื่อคุณมี Nav Bar ที่ควรจะอัปเดตเมื่อผู้ใช้กดNavLink
ปุ่ม ถ้าคุณไปลงที่ถนนที่คุณจะได้เรียนรู้ว่า Redux shouldComponentUpdate
ของการใช้วิธีการเชื่อมต่อ ด้วยrouterReducer
คุณสามารถใช้mapStateToProps
เพื่อแมปการเปลี่ยนแปลงเส้นทางลงในแถบนำทางและสิ่งนี้จะทริกเกอร์ให้อัปเดตเมื่อวัตถุประวัติเปลี่ยนแปลง
แบบนี้:
const mapStateToProps = ({ routing }) => ({ routing })
export default connect(mapStateToProps)(Nav)
ยกโทษให้ฉันในขณะที่ฉันเพิ่มคำหลักพิเศษสำหรับผู้คน: หากส่วนประกอบของคุณอัปเดตไม่ถูกต้องให้ตรวจสอบshouldComponentUpdate
โดยการลบฟังก์ชันการเชื่อมต่อและดูว่าสามารถแก้ไขปัญหาได้หรือไม่ หากเป็นเช่นนั้นให้ดึงrouterReducer
และส่วนประกอบจะอัปเดตอย่างถูกต้องเมื่อ URL เปลี่ยนไป
ในการปิดท้ายคุณสามารถโทรgoBack()
หรือpush()
ทุกเวลาที่ต้องการได้!
ลองใช้เลยในองค์ประกอบแบบสุ่ม:
- นำเข้า
connect()
- คุณไม่ต้องการ
mapStateToProps
หรือmapDispatchToProps
- นำเข้าใน goBack และผลักดันจาก
react-router-redux
- โทร
this.props.dispatch(goBack())
- โทร
this.props.dispatch(push('/sandwich'))
- สัมผัสกับอารมณ์เชิงบวก
หากคุณต้องการการสุ่มตัวอย่างเพิ่มเติมโปรดดู: https://www.npmjs.com/package/react-router-redux