在React利用開辟中,React Router用於處理前端路由,而Redux用於狀況管理。將兩者結合利用可能實現靜態路由數據管理,從而構建出愈加複雜跟機動的利用。以下是實現這一目標的法門:
一、React Router簡介
React Router是一個基於React的庫,用於處理客戶端路由。它容許你在單頁利用(SPA)中定義多個路由,並在用戶拜訪差別URL時襯著響應的組件。
1. 路由組件
React Router供給了多少個核心組件:
- Router:全部利用的容器組件,擔任管理路由信息。
- Route:定義路由規矩跟要襯著的組件。
- Link:創建導航鏈接,利用戶可能導航到其他路由。
- Switch:包裹多個路由規矩,只襯著第一個婚配成功的路由規矩對應的組件。
2. 靜態路由
React Router支撐靜態路由,即路由參數。比方,/user/:id
,其中:id
是一個靜態參數。
二、Redux簡介
Redux是一個用於管理當用狀況的JavaScript庫。它經由過程單一數據源跟弗成變狀況更新機制,使利用的狀況變更愈加可猜測。
1. 核心不雅點
- Action:描述產生了什麼的東西,經由過程
dispatch
方法轉達給store
。 - Reducer:純函數,根據先前的
state
跟action
前去新的state
。 - Store:Redux最核心的管理東西,外部管理著
state
跟reducer
。
2. 同步狀況
Redux經由過程dispatch
方法觸發action
,然後reducer
根據action
更新state
。組件經由過程useSelector
跟useDispatch
鉤子獲取跟更新state
。
三、React Router與Redux同步狀況的法門
1. 創建Redux Store
起首,創建一個Redux Store,並在其中定義reducers
:
import { createStore } from 'redux';
import { routerReducer } from 'react-router-redux';
const store = createStore(
reducer,
applyMiddleware(routerMiddleware)
);
其中,reducer
是React Router的routerReducer
,routerMiddleware
是React Router的旁邊件。
2. 在組件中利用react-router-redux
的useSelector
跟useDispatch
鉤子
import { useSelector, useDispatch } from 'react-redux';
const MyComponent = () => {
const dispatch = useDispatch();
const route = useSelector(state => state.routing.locationBeforeTransitions);
// 利用dispatch更新state
const handleNavigate = () => {
dispatch(push('/new-route'));
};
return (
<div>
<h1>以後路由:{route.pathname}</h1>
<button onClick={handleNavigate}>跳轉到新路由</button>
</div>
);
};
3. 利用react-router-dom
的useParams
跟useLocation
鉤子獲取路由參數
import { useParams } from 'react-router-dom';
const MyComponent = () => {
const { id } = useParams();
return (
<div>
<h1>用戶ID:{id}</h1>
</div>
);
};
4. 在reducers
中處理靜態路由數據
import { createSlice } from '@reduxjs/toolkit';
const usersSlice = createSlice({
name: 'users',
initialState: {
users: []
},
reducers: {
fetchUsersSuccess(state, action) {
state.users = action.payload;
}
}
});
const { fetchUsersSuccess } = usersSlice.actions;
const fetchUsers = () => dispatch => {
// 假設fetchUserById是一個API函數,用於獲取用戶數據
const userId = useParams().id;
fetchUserById(userId)
.then(response => response.json())
.then(data => dispatch(fetchUsersSuccess(data)));
};
export default usersSlice.reducer;
經由過程以上步調,你可能輕鬆實現React Router與Redux的同步狀況,從而實現靜態路由數據管理。在現實項目中,你可能須要根據具體須要調劑代碼跟邏輯。