Я собираюсь создать пакет npm
в reactjs. Где мне нужно получить доступ к redux reducer
того приложения, которое использует этот пакет.
Например, вот некоторые файлы из моего пакета.
RouterLink
export default function RouterLink(props){
const userLogin = useSelector(state => state.user.isLogin);
if (props.privateRoute){
if(!userLogin){
return <Redirect to="/sign-in" />
}
}
// Other code
}
MenuGenerator
export default function MenuGenerator(props){
const userType = useSelector(state => state.user.type);
// Other code
}
Существуют и другие файлы, которые зависят от user reducer
. Таким образом, другие люди могут создавать редуктор с именем user
, иначе он будет не работает.
Например, в моем reactjs, где я использую этот пакет.
export default function userReducer(state = {isLogin: true, type: 'main'}, action){
// other code
}
// It will work because it has same name `user`
const reducers = combineReducer({ user: userReducer });
// Suppose someone added with other name it will not work
const reducers = combineReducers({ userAccount: userReducer });
Я знаю, что могу передать user
данные в props
для каждого компонента из мой пакет. Но на самом деле это всего лишь фиктивный вариант использования. Это очень сложно. Я не могу напрямую передавать данные в props
. Итак, мне нужно использовать redux
в моем пакете и получить доступ к состояниям редуктора, используя useSelector()
Как я могу решить эту проблему. или есть ли способ передать данные user
в свой пакет только один раз и использовать их в каждом компоненте в моем пакете.