Reactjs 如何在无事件的情况下防止setState出现默认值

Reactjs 如何在无事件的情况下防止setState出现默认值,reactjs,Reactjs,假设您在react组件中有一个定义的函数,其中包含一个未由事件触发的this.setState 如何执行preventDefault()以保持页面上的当前滚动 我创建了一个沙箱来说明这种行为: 当定义了组并触发了渲染器时,页面会在顶部滚动。这不会发生id组未定义或包含空数组 如何防止此滚动首先,我认为您的问题与事件无关,但您的组件正在触发渲染。 根据您提供的沙盒,您实际上是在每次组件渲染时声明一个新数组。这意味着React将假定您的[{id:1,content:“group1”},{id:2,

假设您在react组件中有一个定义的函数,其中包含一个未由事件触发的
this.setState

如何执行
preventDefault()
以保持页面上的当前滚动

我创建了一个沙箱来说明这种行为:

当定义了组并触发了渲染器时,页面会在顶部滚动。这不会发生id组未定义或包含空数组


如何防止此滚动首先,我认为您的问题与
事件无关,但您的组件正在触发渲染。
根据您提供的沙盒,您实际上是在每次组件渲染时声明一个新数组。这意味着React将假定您的
[{id:1,content:“group1”},{id:2,content:“group2”}]
是一个新实例,即使数组中的所有项都相同

该行导致您的问题:

groups={[{ id: 1, content: "group1" }, { id: 2, content: "group2" }]}
方法1:将
变量移动到状态 在您调用
setState
(在这种情况下,
setGroups
)之前,React不会重新启动您的
应用程序

方法2:将您的
移动到
应用程序
功能之外 这样,React将不会重新启动您的
应用程序
,因为
未在
应用程序
中声明

方法3:使用记忆反应钩
usemo
函数中的第二个参数定义依赖项数组,将其设置为空数组意味着该值永远不会更改。因此,React不会重新启动您的
应用程序


在渲染中:

groups={groups}

你能发布一些代码吗?到目前为止你试过什么?你的应用程序是如何构造的?就目前情况而言,你的问题还不够具体,无法回答。听起来好像有别的事情在发生。调用
setState
不应刷新页面。如果您在您的状态下控制滚动值,那么我们肯定需要查看更多代码以查看您如何设置状态。如果页面刚刚刷新,我假设您正在提交一些东西,比如表单。在这种情况下,您仍然可以在提交函数的顶部使用
event.preventDefault()
。这完全是猜测。更多的代码将是最有帮助的。请提供一个支持,以配合您的口头解释。我将更新沙箱。在const中声明组内的相同行为:将其移动到
App
函数之外,或将其移动到@lil works的状态
const groups = [{ id: 1, content: "group1" }, { id: 2, content: "group2" }];

function App() {
 ... App Codes
}
const groups = useMemo(() => [{ id: 1, content: "group1" }, { id: 2, content: "group2" }], []);
groups={groups}