reactjs - ReactJS:调整窗口大小时如何阻止屏幕刷新状态?
问题描述
我们的 React 站点有几个基本上是 CRUD 处理的组件/页面:从用户那里收集几个字段,并在提交时将这些字段存储为数据库记录。今天的问题是用户可以填写几个字段,将这些值存储在 State 中,然后如果他们出于任何原因调整屏幕大小,则会丢失所有内容。显然,“调整大小”自动包括“刷新”。
我们希望新的 CSS 生效(例如,移动与桌面的媒体查询)。但是我们不希望我们在 State 中的所有值都被清除,并且屏幕重置到开头。
有没有可能得到我们想要的?
一个典型的领域是
<TextInput
className={"required"}
id="firstName"
name="firstName"
value={this.state.firstName}
onChange={this.handleChange}
placeholder="First Name"
labelText="First Name"
invalid={this.state.firstNameInvalid}
invalidText="First Name is required"
将输入值放入 State 的 handleChange 是:
handleChange(event) {
const {name, value} = event.target
this.setState({[name]: value})
}
State 中的值可以正常工作,直到以任何方式更改窗口大小:最大化/最小化/拖动,将移动设备从垂直变为水平等。在这种情况下,它的行为就像您手动刷新浏览器一样:全部状态回到初始值。
我们正在考虑的一个线索是我们正在使用 react-sidenav 库和 react-router。这些中的任何一个都会导致这样的事情吗?
解决方案
仅供参考,我们找到了罪魁祸首。在我们包装的 nav.js 中,使用 react-sidenav,有一个 on-resize 处理程序将大小设置为状态。通过设置 State,sidenav 重新渲染。当重新渲染时,嵌套在其中的 react-router 也会重新渲染,本质上会导致页面刷新。
推荐阅读
- php - 如何在 laravel 6 中进行分页?上面的异常{调用未定义的方法 App\Clothes::links()}
- jboss-arquillian - Arquillian/Shrinkwrap 社区论坛搬家了吗?
- c++ - 为什么在此处覆盖字符串文字(C++)?
- python - Python 改变现有的字典,类似于列表的切片分配?
- reactjs - UseEffect 和 useCallback 仍然会导致 React 项目中的无限循环
- sql - Oracle SQL 查询挑战 - 优化成本
- php - 如何调试 PHP?厌倦了 laravel 白页
- python - 抓取特定的子元素
- paypal - INR 中的 Paypal 交易
- php - PHP,MySQL - 根据远亲有效地确定访问权限