在 React 中创建的选择控件不会在浏览器刷新时重置(IE11 和 Edge)

IT技术 reactjs internet-explorer-11 microsoft-edge
2021-05-05 15:01:56

我有一个非常简单的 React 应用程序,只有一个选择控件。请参阅此处的工作应用程序选择控件有 3 个值:星期日、星期一和星期二。星期日是默认值。不幸的是,在 IE11 和 Microsoft Edge 上,即使在浏览器刷新后,选择控件也会卡在所选值上!比如选择星期二,然后刷新浏览器——选择框没有回到星期日,就卡在星期二了!在 Chrome 和 Safari 上,我没有看到这个问题。(注意:您必须在各种浏览器上下载并运行该应用程序。)

主要组件的代码如下所示。知道为什么 IE 和 Edge 行为不端吗?

import React from 'react';

class HelloWorld extends React.Component {

  constructor() {
    super();
    this.state = {
      selectedOption: 'sun'
    }
  }

  render() {
    let options = [
      { value: 'sun', label: 'Sunday'  },
      { value: 'mon', label: 'Monday'  },
      { value: 'tue', label: 'Tuesday' }
    ];

    return (
      <select
        className="form-control"
        value={this.state.selectedOption}
        onChange={ e => this.setState({selectedOption: e.target.value}) }>
        {
          options.map(option => {
            return <option value={option.value} key={option.value}>{option.label}</option>;
          })
        }
      </select>
    );
  }

}

export default HelloWorld;
2个回答

Naresh,你的代码很好。

Internet Explorer 和 Edge 行为不当,因为它们缓存了 select 标签在 Windows 上,按 Ctrl+F5 快捷键进行硬刷新。在 Mac 上,按住 ⌘ Cmd 和 ⇧ Shift 键,然后按 R。

从文档:

如果要使用非空值初始化组件,可以提供 defaultValue 属性。例如:

  render: function() {
    return <input type="text" defaultValue="Hello!" />;
  }

同样,<input type="checkbox"><input type="radio">支持defaultChecked,并<select>支持defaultValue

https://facebook.github.io/react/docs/forms.html#default-value