当我将数据从一种状态设置为另一种状态时。它说的是未定义。目前,我正在开发类似火绒的刷卡功能,点击鼠标右键和左键。
我正在将用户id从卡传递到按钮。如右滑动和左滑动按钮。
//场景优先如果已经声明对象的数组为静态,那么它的工作方式就像一个符咒,那么它不会说任何错误。
////场景二如果我使用API将数据动态设置为SetState,并将状态变量数组数据分配给另一个状态变量,它会显示undefined。
我试图在3天内解决这个问题,但没有成功,我是React js的新手。如有帮助,不胜感激。
这是我的代码
const AllData= [
{
id: 1,
name: 'XYZ'
},
{
id: 2,
name: 'ABC'
},
{
id: 3,
name: 'ABC 2'
},
{
id: 4,
name: 'ABC 3'
},
{
id: 5,
name: 'ABC 4'
}
] //It works if set static array
const [AllData, setAllData] = useState([]); //it does not works
const GetAllUserData = async () =>{
const bodyParameters ={
session_id : SessionId
};
const {data : {data}} = await axios.post(GETALLUSER_API , bodyParameters);
setAllData(data);
}
// Setting current user from all data
const [currentUser, setCurrentUser] = useState(AllData[0])
console.log(currentUser); // undefined says
这里,AllData
将在GetAllUserData
执行完成后添加到状态,它是异步函数,所以AllData
在一段时间后将可用,您必须更新currentUser,您必须这样做。
useEffect(() => {
if (AllData.length) {
setCurrentUser(AllData[0]);
}
}, [AllData]);
它不起作用,因为您可能在调用setAllData初始化AllData之前就返回了。
作为一个api调用,返回数据需要一些时间。
对于这种情况,一个很好的解决方案是放置一个加载器,直到它获得数据,当您最终接收到数据时,只在屏幕上呈现内容。