ReactJS:如何在 window 调整大小时停止屏幕刷新状态?

ReactJS: How to stop screen from refreshing State when window is resized?

我们的 React 站点有几个 component/pages 基本上是 CRUD 处理:从用户那里收集几个字段,并在提交时将这些字段存储为数据库记录。今天的问题是,用户可以填写多个字段,将这些值存储在 State 中,然后如果他们出于任何原因调整屏幕大小,就会丢失所有内容。显然,"resize" 自动包含 "refresh".

我们希望新的 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 中的值工作正常,直到 window 尺寸以任何方式改变:maximize/minimize/drag,将移动设备从垂直变为水平等。在这种情况下,它的行为就像您进行了手动浏览器刷新:所有状态都返回到初始值。

我们正在考虑的一个线索是我们正在使用 react-sidenav 库和 react-router。这些都会导致这样的事情吗?

仅供参考,我们找到了罪魁祸首。在我们的包装 nav.js 中,使用 react-sidenav,有一个调整大小的处理程序将大小设置为状态。通过设置State,sidenav重新渲染。当重新渲染时,嵌套在其中的 react-router 也会重新渲染,本质上导致页面刷新。