Дочерние реквизиты равны нулю при загрузке компонента из родительского

#javascript #reactjs

#язык JavaScript #реагирует на

Вопрос:

Я очень новичок в реагировании — так что потерпите меня.

Я пытаюсь создать набор защищенных от аутентификации маршрутов/компонентов. У меня есть приведенный ниже код, который я использую для достижения этой цели.

Однако моя проблема заключается в том, что при загрузке дочернего компонента userInfo {} он (т. е. не задан). Я знаю, что userInfo данные возвращаются из userService , так как мои console.log возвращает правильные данные.

Правильно ли я поступаю? Я хочу иметь возможность защитить компонент/маршрут и пройти по userInfo любому защищенному маршруту, чтобы я мог работать с данными в соответствующем компоненте.

 const UserAuthenticatedRoute = ({component: Component, ...rest}) =gt; {  const [isLoggedIn, setIsLoggedIn] = useState(false);  const [userInfo, setUserInfo] = useState({});   useEffect(async () =gt; {  const r = await userService.isUserLoggedIn();  console.log(r.status);   if (r.status === 200){  setIsLoggedIn(true);  const userInfo = await r.json();  console.log(userInfo);  setUserInfo(userInfo);  } else {  setIsLoggedIn(false);  }  }, []);   return (  lt;Route {...rest} render={props =gt; (  lt;gt;  lt;maingt;  {isLoggedIn amp;amp;  lt;Component {...props} userInfo={userInfo}/gt;  }  lt;/maingt;  lt;/gt;  )}  /gt;  ); };  

Комментарии:

1. вы не setIsLoggedIn(true) должны этого делать до тех пор , пока await не произойдет, поэтому дочерний элемент никогда не будет отображаться до тех пор, пока у вас действительно не будут пользовательские данные

2. Спасибо @RobinZigmond, что сделал свое дело 🙂