Автодополнение собственного браузера не работает для контролируемых входов ReactJS в IE11, Firefox, MS Edge (работает только в Chrome) - PullRequest
1 голос
/ 31 мая 2019

Мне нужно сделать так, чтобы родная форма браузера автоматически заполнялась для контролируемых входов в React во всех браузерах (в настоящее время работает только в Chrome).

Ниже приведен фрагмент кода из документа формы реагирования.(https://reactjs.org/docs/forms.html). Я только добавил атрибут имени к элементу ввода. Полный пример с возможностью запуска на https://codepen.io/DChuhin/pen/ZNmdWj

Так что после выполнения шагов в коде пера: 1) введите любое значение 2) передайте предоставленное значение3) начать вводить то же значение после отправки: в chrome я вижу свой предыдущий ввод как параметр автозаполнения, но в других браузерах он не работает.

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value: ''};

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleChange(event) {
    this.setState({value: event.target.value});
  }

  handleSubmit(event) {
    alert('A name was submitted: ' + this.state.value);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input name="testName" type="text" value={this.state.value} onChange={this.handleChange} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

После изучения этого я обнаружил, чтопроблема заключается в том, что браузеры (кроме chrome) не сохраняют введенное значение как параметр автозаполнения, если видимое значение на странице равно атрибуту значения в html (в инспекторе) в момент отправки формы (считается, что пользователь не вводил никакого ввода).Но так как идея React-контролируемого компонента состоит в том, чтобы поддерживать атрибут value всегда в актуальном состоянии (он всегда равен значению на странице), это ведет к проблеме, заключающейся в невозможности сохранить значения для автозаполнения.

кто-нибудь знает как это решить?

...