当你打开reactjs.org时,在“声明性”标题下,有一句话:当您的数据发生更改时,React将高效地更新和呈现正确的组件。
对于我的几个应用程序,我使用以下结构:应用程序|AppContainer(所有应用程序逻辑,登录前受保护)|登录(登录表单)
如果您根据用户的凭据在App的render
中返回2个不同的组件,则此结构可以正常工作。
render(){
if(isUserLoggedIn()){
return <AppContainer />;
}
return <Login />;
}
在Login
组件中,我使用window.location.reload
刷新页面,这样应用程序的render
将被触发,我将获得AppContainer
组件。
- 但感觉有点像jQuery + Angular。* 有没有更好(更React)的方式来触发呈现函数,或者事情就应该是这样的?
3条答案
按热度按时间prdp8dxp1#
有没有更好的(更多的React)方式来触发渲染功能...
通常的方法是使用state,在本例中至少使用一个布尔值表示用户是否登录,并在用户成功登录或注销时更新该状态。
在您的示例中,由于您使用的是Redux,因此可能会在那里显示您的状态。
我没有使用Redux(还没有?),这是它看起来模糊的样子,粗略地(如果你使用一个类组件,因为你似乎是):
或带钩:
(再次粗略)
bgtovc5b2#
如果您需要更新组件状态,那么您可以传递一个可观察对象并侦听更改,或者使用某个状态管理库。
下面是一个可能的解决方案:
1.创建可观察类
1.创建将发布登录或注销等操作事件的Login类
1.在组件中订阅观察器并使用事件值更新组件状态
um6iljoc3#
您可以使用
useNavigate
并导航到您所在的同一url。例如,您可以使用navigate("/...your current url....")
来代替window.location.reload()
window.location.reload()
并不是每次都是最好的选择。它可以在localhost上工作,但是例如当你通过使用“Netlify”等服务将它部署到互联网上时,它可能会导致“找不到url”错误创建一些额外的状态并跟踪它们以重新呈现页可能会不必要地使代码复杂化。