если я передаю новое электронное письмо в URL, я вижу, что повар ie обновился, но новое электронное письмо не отображается на странице, отображается только предыдущее.
Полагаю, это означает, что вы хотите загрузить электронную почту из строки запроса URL, верно? Но я немного запутался, потому что код, который вы предоставляете, загружает только данные от повара ie. Если вы хотите синхронизировать c ввод с URL-адреса, а также сохранить значение в Cook ie, вы можете попробовать что-то вроде этого. Но я думаю, что нам нужно только одно место для сохранения данных электронной почты (строка запроса URL ИЛИ cook ie). Надеюсь, что это может помочь.
import React, { Component } from "react";
import Cookies from "js-cookie";
const COOKIE_KEY = "email";
export default class CookieInput extends Component {
constructor(props) {
super(props);
this.state = {
email: this.getInitialStateFromCookie()
};
}
getInitialStateFromCookie = () => {
// if we have email in query string, then set as initial data
const urlParams = new URLSearchParams(window.location.search);
if (urlParams.has("email")) {
const email = urlParams.get("email");
Cookies.set(COOKIE_KEY, email);
return email;
}
// otherwise, try get data from cookie
return Cookies.get(COOKIE_KEY) || "";
};
handleChange = e => {
const email = e.target.value;
// update state, cookie & route when input change
this.setState({ email });
Cookies.set(COOKIE_KEY, email);
window.history.pushState(null, null, `?email=${email}`);
};
render() {
const { email } = this.state;
return (
<div>
<input value={email} onChange={this.handleChange} />
</div>
);
}
}