Arrays 在react中设置状态数组

Arrays 在react中设置状态数组,arrays,reactjs,local-storage,Arrays,Reactjs,Local Storage,我一直在尝试将一个对象推送到一个状态数组中,然后再推送到本地存储中,这样即使在刷新之后它也可以保持可见。除了最终的推送之外,一切都正常。为了让一个对象保存在本地,我必须添加它和它后面的一个,后面的一个不会保存。非常感谢您的帮助 function App() { const [data, setData] = useState([{ name: "", thumbnail: { path: "" } }]); const [team, setTeam

我一直在尝试将一个对象推送到一个状态数组中,然后再推送到本地存储中,这样即使在刷新之后它也可以保持可见。除了最终的推送之外,一切都正常。为了让一个对象保存在本地,我必须添加它和它后面的一个,后面的一个不会保存。非常感谢您的帮助

function App() {
  const [data, setData] = useState([{ name: "", thumbnail: { path: "" } }]);
  const [team, setTeam] = useState(JSON.parse(localStorage.getItem("team")));
  console.log(team);
  useEffect(() => {
    fetch(
      "http://gateway.marvel.com/v1/public/characters?apikey="
    )
      .then((data) => data.json())
      .then((data) => setData(data.data.results));
  }, []);

  const addToTeam = (hero) => {
    !team ? setTeam([hero]) : setTeam([...team, hero]);
    localStorage.setItem("team", JSON.stringify(team));
  };


反应状态更新不同步。 因此,当您运行此代码时:

  const addToTeam = (hero) => {
    !team ? setTeam([hero]) : setTeam([...team, hero]);
    localStorage.setItem("team", JSON.stringify(team));
  };
您可以设置以前的
team
值,而不是刚才设置的值

要解决此问题,您可以在
团队
状态更改时产生副作用,并从中更新localStorage

useffect(()=>{
setItem(“team”,JSON.stringify(team));
},[团队];

什么不起作用?localStorage或SetTam?它们都可以工作,除了为了使第一个添加的对象在刷新后可见,我需要在它之后添加一个对象,只有这样它才能保留在本地存储中。它总是落后一步。谢谢你,好先生,今天你教了我一些东西。它现在起作用了:这应该被标记为正确答案