使用redux数据更改React导航栏组件

guz6ccqo  于 2023-01-17  发布在  React
关注(0)|答案(2)|浏览(139)

所以基本上在这里我希望我的导航条路线随着redux reducer的登录信息而改变,但路线保持静态。

useEffect(() => {
  getUserInfo();
  console.log(props.userInfo?. isLoggedIn)
  if (props?.userInfo?.isLoggedIn == true) {
    setUserState(['profile','dashboard','wallet']);
  } else {
    setUserState(['sign-in','sign-in','sign-in']);
  }
},[props])

这里我把我的路由作为一个数组存储在useState钩子中,但是这个useEffect钩子直到我通过<Link></Link>组件改变路由时才进行强制转换,我希望它在redux状态改变时立即进行强制转换。

ehxuflar

ehxuflar1#

const [userState, setUserState] = useState([])
useEffect(() => {
    getUserInfo();
    console.log(props.userInfo?. isLoggedIn)
    if(props?.userInfo?.isLoggedIn == true) {
      setUserState(['profile','dashboard','wallet']);
    } else {
      setUserState(['sign-in','sign-in','sign-in']);
    }
  },[props,userState])

在useEffect依赖性数组中添加userState。

3npbholx

3npbholx2#

不要在React状态中存储派生状态,这是React反模式。您可以直接从“依赖项”呈现UI。这假定组件已正确订阅Redux存储,并且userInfo是存储中的选定状态。

const authenticatedRoutes = ['profile','dashboard','wallet'];
const anonymousRoutes = ['sign-in','sign-in','sign-in'];
...

return (
  ...
  {(props.userInfo?.isLoggedIn ? authenticatedRoutes : anonymousRoutes).map(path => {
    // compute and return JSX
  })}
  ...
);

更常见/实用的解决方案是创建读取userInfo.isLoggedIn属性的路由保护器组件,并有条件地呈现受保护的路由/组件或重定向到“安全路由”,您可以在我的答案here中阅读更多关于一般路由保护的内容。

相关问题