reactjs - 如何比较 2 个 fetch 数组以在 reactjs 中设置状态
问题描述
我有一个与 reactjs 中的设置状态相关的问题。
我需要获取 2 个 API,然后想将一个对象(称为team_lead
)与一个对象(userProfile
)进行比较。对象 ( team_lead
) 的 id 是否与另一个对象 ( ) 的 id 相等userProfile
。如果 2 个 id 相等,我将设置 state: auth: true
。我的“应用”按钮将只显示是否auth: true
。我的想法是仅当用户登录并且用户也是团队负责人时才会显示该按钮。
export class TeamInfo extends React.Component {
state = {
checked_auth: false,
team_lead:[],
userobject: {}
}
componentDidMount(){
axios
.get(`/teams/13`)
.then(responseData => {
this.setState({
teamlead: responseData.data.team_lead,
})
})
.catch(error => console.error(error));
axios
.get(`/profiles/?user=${userObject.user.id}`)
.then(responseData => {
if (this.state.teamlead.id === responseData.data[0].id) {
console.log("tea ok")
this.setState({
checked_auth: true
})
}
})
.catch(error => console.error(error));
}
render(){
return (
{this.state.checked_auth ? <Button> Apply </Button> : <div></div>}
)
}
}
我登录并检查。有时,会显示“应用”按钮。但是,大多数时候,按钮是隐藏的。有人可以帮我处理这个案子吗?
解决方案
问题是您正在发送 2 个异步请求。但第二个取决于第一个。
你可以使用Promise.all来解决这个问题。
componentDidMount(){
const firstRequest = axios
.get(`/teams/13`)
.then(responseData => responseData.data.team_lead)
.catch(error => console.error(error));
const secondRequest = axios
.get(`/profiles/?user=${userObject.user.id}`)
.then(responseData => responseData.data[0])
.catch(error => console.error(error));
Promise.all([firstRequest, secondRequest]).then(values =>
if (values[0].id === values[1].id) {
console.log("tea ok")
this.setState({
checked_auth: true
})
}
);
}
推荐阅读
- react-native - 反应原生地理定位服务不适用于 iOS
- java - 如何配置 Jackson 以首先序列化基类?
- spring-boot - PagingAndSortingRepository 第一个页面加载很慢
- python - 用于 Solaris 操作系统的 Geckodriver
- python - 如何区分产品页面和普通页面
- pentaho - 将数千行转置为 Pentaho 中的列
- java - Webview 加载 url,然后加载此图像
- c - 我怎么知道该文件已打开并在使用 C 代码进行一些编写操作后保存?
- jquery - 在角度 8 中重新初始化数据表实例后分页不起作用
- asp.net-mvc - 指定的文件不存在:“~/Scripts/telerik.grid.js”