JS react数组push后,添加的元素拿不出来。

先定义了一个长度为2 的数组,由于后端写了一个方法,所以在.then()里push这个数组。

当方法执行后console.log这个新的数组,发现显示元素个数还是2,但展开之后里面有三个元素,length也显示为3。

这样的话我用list[2]是undefined,拿不出来添加的元素。

有什么解决办法吗。

取list[2]的代码要放到then push代码后,看到控制台的感叹号了吗,提示对象被修改过,因为console.log打印当时的值,如果后续被修改后展开就有感叹号

 

使用到then都是异步执行的,如果获取list的代码放到then外面,异步没返回就已经执行获取list[2]的代码了,是无法获取到的,为undefined

let arr1 = [1, 2, 3]

this.$get().then( res => {
  let arr2 = res.data
  arr1.push(...arr2)
})

请尝试使用ES6中的对象扩展运算符赋值。

因为.then()中的函数是异步执行的。
在.then()之后的console.log(list[2]);会先执行,这时list数组还没有添加元素。

你只能把console.log(list[2]);放到.then()中的函数里。或者写个回调函数在.then()中的函数里回调。

 

var list = [{
	dptName: '部件编码',
	dptNo: 'dptNo'
}, {
	dptName: '部件名称',
	dptNo: 'dptName'
}];
useEffect(() => {
	async function HAHA() {
		//return queryZhishi({ clsId: selectedClsId }); 
		const result2 = queryDataPt({
			clsId: selectedClsId
		}).then(data => {
			for (var j = 0; j < data.data.length; j++) {
				list.push({
					dptName: '',
					dptNo: ''
				})
			};
			for (var j = 0; j < data.data.length; j++) {
				list[j + 2].dptName = data.data[j].dptName
			};
			for (var j = 0; j < data.data.length; j++) {
				list[j + 2].dptNo = data.data[j].dptNo
			};
			console.log(list)
			var t = list.length;
			recoll(); //在.then()中的函数里回调
		})
	}
	HAHA();
	console.log('888888888888' + selectedClsId + '99999999');
	console.log('5555555555555555555');
}, [selectedClsId])

function recoll() {  //设置回调函数

	console.log(list.length)
	console.log(list);
	console.log(list[2]);
	
}

 

贴代码看看呢,这样看不出具体问题

你这把改变值后的数组的长度赋给改变之前的数组长度,不就ok了

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632