Хранилище - это единственный источник правды, и любой набор там будет доступен в области действия родительского компонента, но вы можете ограничить доступ к данным хранилища через ловушки, как показано ниже:
Инициализация хранилища:
const initialState = {
user: null,
permissions: [],
isAuthenticating: false,
authError: null,
}
Функция редуктора:
function reducer(state, action) {
switch(action.type) {
case 'AUTH_BEGIN':
return {
...state,
isAuthenticating: true,
}
case 'AUTH_SUCCESS':
return {
isAuthenticating: false,
user: action.user,
permissions: action.permissions
authError: null,
}
case 'AUTH_FAILURE':
return {
isAuthenticating: false,
user: null,
permissions: []
authError: action.error,
}
default:
return state
}
}
Компонент приложения:
function App() {
const [store, dispatch] = useReducer(initialState)
return (
<React.Fragment>
<Navbar user={store.user} />
<LoginPage store={store} dispatch={dispatch} />
<Dashboard />
<SettingsPage permissions={store.permissions} />
</React.Fragment>
)
}
Здесь вы можете видеть, что хранилище необязательно для передачи в конкретный компонент, в приведенном выше примере компонент не может получить доступ к хранилищу.