У меня была такая же проблема в проекте, я должен был показать экран, если пользователь был супервизором, и показать другой экран, если не был супервизором.
Я использовал react-dynamic-import
, в основном я разделил свой основной проект состоит из 3 частей:
- Экран сотрудника - экран с доступом и компонентами, если пользователь не был супервизором.
- Экран супервизора - Экран с доступом и компонентами, если пользователь был супервизором.
- Экран по умолчанию - экран, который будет отображаться независимо от того, является ли пользователь супервизором или нет, и вытащите с помощью
react-dynamic-import
ваш обязательный экран, если пользователь был супервизором, я вытаскиваю экран супервизора, если не был супервизором, вытащите экран сотрудника
Вы можете сохранить ha sh в сеансе cook ie и прочитать этот cook ie в JS и проверить его с помощью REST API, и возврат REST API будет путь, где находится компонент Premium, например:
// getting hash from cookie
const userHash = document.cookie.replace(/^.*;?user-hash=([^;]+);?.*$/, '$1');
// generate api LINK with
const apiLink = `/API/V1.0/checkuser?hash=${encodeURI(hash)}`;
/* getting value where are path is premium or isn't premium, in my case i'am using Ajax Request and my API returns a JSON like :
{"path": "pathWhereAreComponentPremium"}
*/
const pathComponent = (await $.get(apiLink)).path;
const loader = () => import(pathComponent);
// Load component dynamically
var Component = ReactDynamicImport({loader});
// ...
В Component
- это компонент, если пользователь является премиум-классом или нет.
Редактировать 1: Простите мой engli * 1 039 *, я бразилец, и я учусь.
Редактировать 2:
Если вы хотите просто визуализировать компонент с помощью условного анализа, вы можете сделать это :
const App = (props) => {
const [isPremium, setPremium] = React.useState(false);
const handleButtonPremium = () => (setPremium(!isPremium));
return (<>
<div>
T-Shirt
{isPremium ? <button>Get</button> : <button>Buy $1.5</button>}
</div>
<button onClick={handleButtonPremium}>
{isPremium ? "Cancel Premium assign" : "Get Premium assign"}
</button>
</>)
}
Подробнее здесь