Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用react路由器时,我刷新并丢失状态?_Javascript_Reactjs_React Redux_React Router_Frontend - Fatal编程技术网

Javascript 使用react路由器时,我刷新并丢失状态?

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路由器与状态管理无关。要

我正在通过location.state将以前获取的数据传递给后续组件。但是,如果用户点击“刷新我的历史记录”,并且位置状态对象被清除,那么这就可以了。我可以看出这是预期的功能。我的问题是,我应该使用redux来保持数据的持久性吗?如果是这样的话,在我看来,我失去了react路由器的许多好处。使用react路由器时,人们是如何处理状态的?

react路由器与状态管理无关。要管理状态,请使用Redux或其他解决方案,如Xstate。要在客户端上持久保存数据,您可以查看React路由器与状态管理无关。要管理状态,请使用Redux或其他解决方案,如Xstate。要在客户端上持久保存数据,您可以查看

,您可以将状态传递为,或将其保存以供更广泛的访问

您可以将状态传递为,或将其保存以供更广泛的访问

为了能够持久化数据,例如,您应该将数据存储在数据库或本地存储上。当您刷新页面时,您可以从存储中获取数据

如果您的组件是类基组件,则可以使用componentDidMount获取数据并设置状态或redux

如果您的组件是功能组件,则可以在相同的场景中使用useEffect。(react版本应大于16.8)


为了能够持久保存数据,例如,您应该将数据存储在数据库或本地存储上。当您刷新页面时,您可以从存储中获取数据

如果您的组件是类基组件,则可以使用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上,以便在初始状态和保存