微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ReactJS->将项目追加到数组,但显示未定义

如何解决ReactJS->将项目追加到数组,但显示未定义

我在两个不同的JS文件中有2个数组,它们声明如下: Index.JS:

const [product,setProduct] = useState([]);
const [item] = useState([
  {
    name: 'Blue Dress',Image: '/static/media/Dress.1c414114.png',Price: 540,id: 0,},{
    name: 'Red Dress',image: '/static/media/Dress.1c414114.png',Price: 600,id: 1,]);

第二个JS文件

const [product,setProduct] = useState([]);

这是将数据附加到它们的一段代码: Index.JS:

const addItem = (item) => {
  setProduct([...product,item]);
  localStorage.setItem('products',JSON.stringify(product));
};

第二个JS文件

const getProducts = () => {
  let X = JSON.parse(localStorage.getItem('products'));
  setProduct([...product,X]);
  console.log(product);
};

问题是,每当我在浏览器中转到第二个JS文件时,它都会接收本地存储项,并且假设应该将其添加到产品列表中,但是经过深入研究,我得出了结论并没有真正添加任何东西。为什么呢?

解决方法

您正在使用此行创建新引用:

   setProduct([...product,X])

之后,除非您将其用于公共上下文,否则这两个上下文产品将引用不同的对象;您将需要在公共上下文中定义const[product,setProduct] = useState() 并将其传递给两个组件,以使它们始终引用同一对象。例如:

//common context
const [product,setProduct] = useState()

const c1 = <Component1 useState={[product,setProduct]} />
const c2 = <Component2 useState={[product,setProduct]} />

...
//components

function Component1(props){
   const [product,setProduct] = props.useState;
...
}

function Component2(props){
   const [product,SetProduct] = props.useState;
...
}
,

由于设置的产品是空数组localStorage.setItem,因此在设置状态之后,您正在做[]。 您必须使用useEffect,并且可以在其中设置产品数组。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。