javascript - 动态分配的对象属性未在页面加载时呈现
问题描述
我正在构建一个预订应用程序并且有一堆我正在呈现的事件。在每个事件中,我都添加了一个动态布尔值,该值取决于用户是否已经预订了该事件。如果该值为 true 我想禁用该按钮,如果不是,则显示它。我面临的问题是,虽然我能够为每个对象设置属性,但是当我将它作为道具传递时,它无法正确渲染。相反,如果我转到第二页然后返回,它将正确显示。
const getEvents = async(user_id) =>{
try{
const data = await axios.get("http://localhost:5000/locations");
var events = data.data.data;
const isWish = 'isWish'
events.map(el => {
//check if it's booked
let isSelected = checkWish(user_id, el.Id);
(isSelected.then(function(data){
if(data === true){
el[isWish]=true;
} else if(data === false){
el[isWish]=false;
}
}));
})
//dispatch the new objects to the reducer
dispatch({type:GET_EVENTS, payload:events});
} catch{
}
}
然后在事件组件中,我调用useEffect()
钩子并让对象脱离状态,用 循环遍历它们,map()
并将它作为EventsItem
要渲染每个对象的组件传递。
{currentPost.map((event) =><EventItem excursion={event} user={user}></EventItem>)}
最后我进行必要的检查
const EventItem = ({excursion, user}) => {
const {Company, City, Picture, ShortDescription, Id, isWish} = excursion;
return (
<div>
{isWish ? <button>I'm disabled</button> : <button>I'm disabled</button>}
</div>
)
解决方案
因此,考虑到我在函数内部进行了两次数据库调用,我决定将dispatch
内部 a包装起来,setTimeOut()
因为我想出的唯一合乎逻辑的事情是,当我呈现页面时,该值的加载速度不够快它奏效了!
推荐阅读
- php - 使用 PHP 从新闻站点访问 XML 元素和命名空间(已编辑)
- android - nativescript - 提取 tns-android 时验证失败
- javascript - 需要哪些 javascript 包含文件才能使布局扩展在 cytoscape 中工作?
- python - 熊猫数据框在排序后未保存
- python - 从嵌套列表 Python 中删除重复项 - 错误
- android - Android Studio:如何在一个屏幕上同时显示 2 个活动?
- javascript - 如何使用 switch case 将包含字符串的 a 值放入数组中的正确对象中?
- python - 如何使不同的 Django 表单输入按钮显示在同一行
- rust - 在迭代器上调用“any”的闭包内使用迭代器
- javascript - 如何使用 JQuery 在使用可拖放和可拖放之后插入和追加?