Javascript 使用react路由器时,我刷新并丢失状态?
我正在通过location.state将以前获取的数据传递给后续组件。但是,如果用户点击“刷新我的历史记录”,并且位置状态对象被清除,那么这就可以了。我可以看出这是预期的功能。我的问题是,我应该使用redux来保持数据的持久性吗?如果是这样的话,在我看来,我失去了react路由器的许多好处。使用react路由器时,人们是如何处理状态的?react路由器与状态管理无关。要管理状态,请使用Redux或其他解决方案,如Xstate。要在客户端上持久保存数据,您可以查看React路由器与状态管理无关。要管理状态,请使用Redux或其他解决方案,如Xstate。要在客户端上持久保存数据,您可以查看,您可以将状态传递为,或将其保存以供更广泛的访问 您可以将状态传递为,或将其保存以供更广泛的访问 为了能够持久化数据,例如,您应该将数据存储在数据库或本地存储上。当您刷新页面时,您可以从存储中获取数据 如果您的组件是类基组件,则可以使用componentDidMount获取数据并设置状态或redux 如果您的组件是功能组件,则可以在相同的场景中使用useEffect。(react版本应大于16.8)Javascript 使用react路由器时,我刷新并丢失状态?,javascript,reactjs,react-redux,react-router,frontend,Javascript,Reactjs,React Redux,React Router,Frontend,我正在通过location.state将以前获取的数据传递给后续组件。但是,如果用户点击“刷新我的历史记录”,并且位置状态对象被清除,那么这就可以了。我可以看出这是预期的功能。我的问题是,我应该使用redux来保持数据的持久性吗?如果是这样的话,在我看来,我失去了react路由器的许多好处。使用react路由器时,人们是如何处理状态的?react路由器与状态管理无关。要管理状态,请使用Redux或其他解决方案,如Xstate。要在客户端上持久保存数据,您可以查看React路由器与状态管理无关。要
为了能够持久保存数据,例如,您应该将数据存储在数据库或本地存储上。当您刷新页面时,您可以从存储中获取数据 如果您的组件是类基组件,则可以使用componentDidMount获取数据并设置状态或redux 如果您的组件是功能组件,则可以在相同的场景中使用useEffect。(react版本应大于16.8)
数据可以通过
localStorage()
功能本地存储在浏览器上。还可以使用this.props.history.push
功能将数据发送到下一个组件。
最后,我选择将数据保存在浏览器的本地存储中,因为我希望在子react组件中传递和访问数据,并能够刷新页面。通过将数据保存在本地存储器中,数据将保持不变,而使用history.push()
功能传递数据,点击刷新按钮后数据将被删除
下面是一个示例,用于在子组件中传递pseudo
变量的内容
localStorage.setItem('pseudo',this.state.pseudo)
或
这个。道具。历史。推({
路径名:'/NextPage',
数据:{pseudo:this.state.pseudo}
});
要获取子组件NextPage.js中的数据,可以使用以下代码:
props.location.data.pseudo
或
localStorage.getItem(“伪”)
数据可以通过localStorage()
功能本地存储在浏览器上。还可以使用this.props.history.push
功能将数据发送到下一个组件。
最后,我选择将数据保存在浏览器的本地存储中,因为我希望在子react组件中传递和访问数据,并能够刷新页面。通过将数据保存在本地存储器中,数据将保持不变,而使用history.push()
功能传递数据,点击刷新按钮后数据将被删除
下面是一个示例,用于在子组件中传递pseudo
变量的内容
localStorage.setItem('pseudo',this.state.pseudo)
或
这个。道具。历史。推({
路径名:'/NextPage',
数据:{pseudo:this.state.pseudo}
});
要获取子组件NextPage.js中的数据,可以使用以下代码:
props.location.data.pseudo
或
localStorage.getItem(“伪”)
是的,但如何通过react路由器传递状态,而不使用历史或位置状态?是的,但如何通过react路由器传递状态,而不使用历史或位置状态?我不确定为什么您认为使用redux进行数据持久化会否定react路由器的好处,但基本上,您可以将数据保存到浏览器的本地存储中,然后在安装组件时检查数据是否已经存在(以及存储的数据是否太少,是否需要重新获取)。或者您可以使用redux,将数据保存在存储中,并在刷新和链接时使用类似于redux persist
的模块来持久化存储。我不确定您为什么认为使用redux进行数据持久化会否定react router的好处,但基本上您可以将数据保存到浏览器的本地存储中,然后检查组件装载时数据是否已经存在(以及存储的数据是否太少,是否需要重新获取)。或者您可以使用redux,将数据保存在存储中,并使用类似于redux persist
的模块在刷新时持久化存储,并且链接正确,我只有一个大约4个步骤的数据流,如果您在第4步刷新,或者直接导航到第4步,由于状态未定义,因此没有任何效果。这就是状态的工作方式,刷新时会清除。我通过在事件状态未定义的情况下返回步骤1解决了这个问题。我明白了。我要做的是将其保存在sessionState上,这样在初始状态下,保存状态的变量未定义,它将只获取从sessionState保存的变量。正确,我只是有一个数据流,大约有4个步骤,如果在第4步刷新,或直接导航到第4步,则由于状态未定义,因此没有任何效果。这就是状态的工作方式,刷新时会清除。我通过在事件状态未定义的情况下返回步骤1解决了这个问题。我明白了。我要做的是将它保存在sessionState上,以便在初始状态和保存