【发布时间】:2021-10-25 14:04:27
【问题描述】:
我是 React 的新手,正在学习 Youtube 上的初学者课程。在一节中,培训师正在解释如何使用浏览器的 localStorage 来获取和设置项目。但是,我不明白为什么要先用 getItem 调用 useEffect 而不是用 setItem 调用 useEffect。如果我将 setItem 代码放在 getItem 上方,则它不起作用。
请检查下面的代码
import React, { useState, useEffect} from 'react';
import { uuid } from 'uuidv4';
import './App.css';
import Header from './Header';
import AddContact from './Addcontact';
import ContactList from './ContactList';
function App() {
const LOCAL_STORAGE_KEY = "contacts";
const [contacts, setContacts] = useState([]);
const addContactHandler = (contact) => {
console.log(contact);
setContacts([...contacts, {id: uuid(), ...contact}]);
}
const removeContactHandler = (id) => {
const newContactList = contacts.filter((contact) => {
return contact.id !== id;
});
setContacts(newContactList);
}
useEffect(()=>{
const retrieveContacts = JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY, JSON.stringify(contacts)));
if(retrieveContacts) setContacts(retrieveContacts);
}, [])
useEffect(()=>{
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(contacts));
}, [contacts])
return (
<div className="ui container">
<Header/>
<AddContact addContactHandler={addContactHandler}/>
<ContactList contacts={contacts} getContactId={removeContactHandler} />
</div>
);
}
export default App;
【问题讨论】:
标签: javascript reactjs ecmascript-6 local-storage