Сохранение старого и нового состояния в React

#javascript #reactjs

#javascript #reactjs

Вопрос:

У меня есть состояние newuser , которое изменяется в зависимости от входных данных в полях ввода, в конце концов, входные данные заполнены, и нажата кнопка отправки.

Я хочу сохранить текущее состояние нового пользователя, а затем, когда поля ввода будут заполнены во второй раз, у меня будет другое состояние для хранения предыдущего значения newuser и текущего значения.

 const [newuser,setnewuser] = useState({'firstname':'','lastname':''});
const [users,setusers] = useState([]); <-- this is expected to hold newuser objects as the submit button is clicked
 

Пожалуйста, как мне это сделать, я попытался использовать оператор распространения setusers(...newuser,newuser) , но это не сработало.

Комментарии:

1. Как насчет setusers([...users, newuser]);

2. Он отображает только текущее состояние

3. Можете ли вы показать больше своего кода или jsFiddle с минимальным кодом, необходимым для воспроизведения вашей ошибки?

Ответ №1:

правильное решение для этого — сохранить ваше старое состояние где-нибудь, например, в cache или localstorage. Для вашего конкретного случая кода мы можем использовать effect для синхронизации состояния

 const [newuser,setnewuser] = useState({'firstname':'','lastname':''});
const [users,setusers] = useState([]); 
useEffect(() => {
  if(newuser amp;amp; newuser.firstname amp;amp; newuser.lastname amp;amp; !users.includes(newuser)) {
    setusers([...users, newuser])
  }
}, [JSON.stringify(newuser)]);
 

в случае, если вы хотите использовать правильное решение, я могу показать простое решение с использованием кэша, вам необходимо установить «memory-cache»

 import cache from 'memory-cache'
const [newuser, _setnewuser] = useState(cache.get('newuser') || {'firstname':'','lastname':''});
const setnewuser = (user) => {
   _setnewuser(user);
   cache.put('newuser', user);
}
 

Комментарии:

1. Спасибо за это, то, что я на самом деле хочу сделать, это сохранять newuser в локальное хранилище при каждом нажатии кнопки, поэтому мой план состоял в том, чтобы сохранить все newuser в users и нажать на localstorage

2. вы можете использовать кэш памяти или localstorage напрямую

3. Пожалуйста, как мне это сделать

4. Я только что добавил решение с использованием кэша. если вы хотите использовать localstorage, измените cache api на localstorage api вместо этого. Идея все та же