Javascript 在React中选择产品后如何显示结果
我有一个以表格形式显示的产品列表,我希望在单击产品行时在模式上显示有关某个产品的更多信息(调用另一个api)。该模式现在正在工作,并且在单击行时显示该模式,但我不确定如何实现对另一个api/端点进行另一次调用的逻辑,以及在单击时显示有关正确产品的信息。我应该在哪里进行另一个api调用?我是否应该为构造函数中的另一个api设置另一个状态,然后获取ComponentDidMount()Javascript 在React中选择产品后如何显示结果,javascript,reactjs,api,Javascript,Reactjs,Api,我有一个以表格形式显示的产品列表,我希望在单击产品行时在模式上显示有关某个产品的更多信息(调用另一个api)。该模式现在正在工作,并且在单击行时显示该模式,但我不确定如何实现对另一个api/端点进行另一次调用的逻辑,以及在单击时显示有关正确产品的信息。我应该在哪里进行另一个api调用?我是否应该为构造函数中的另一个api设置另一个状态,然后获取ComponentDidMount() //Modal.js 从“React”导入React; 从“反应引导/表格”导入表格; 导出默认函数Modal()
//Modal.js
从“React”导入React;
从“反应引导/表格”导入表格;
导出默认函数Modal(){
返回(
自有产品
竞争对手产品
接近
);
}
//ProductTable.js
导出默认类TableView扩展组件{
建造师(道具){
超级(道具);
此.state={
产品:[],
错误:null,
isLoaded:false,
莫达洛彭:错,
所选产品:{}
};
}
toggleModal=产品=>{
this.setState({selectedProduct:product});
this.setState(prevState=>({
modalOpen:!prevState.modalOpen
}));
};
获取产品(){
axios
.得到(
“一些api”
)
。然后(res=>{
控制台日志(res);
这是我的国家({
isLoaded:是的,
产品:res.data
});
})
.catch(错误=>{
console.log(错误);
});
}
componentDidMount(){
这是fetchProducts();
}
render(){
设{isLoaded,products}=this.state;
如果(!已加载){
返回;
}否则{
返回(
{this.props.rows}
产品ID
匹配ID
匹配名称
烙印
比赛分数
匹配价格
匹配状态
{产品&&
products.map(product=>(
//改为使用过滤器仅显示匹配的
this.toggleModal(产品)}
>
{product.id}
{product.matches[0].id}
{product.matches[0].name}
{product.matches[0]。specifications.brand}
{Math.round(product.matches[0].score)}
{product.matches[0]。price}
{product.matches[0].matchLabel}
))}
{this.state.modalOpen(
):null}
);
}
}
}
这方面可以有多种方法
this.state = {
products: [],
error: null,
isLoaded: false,
modalOpen: false,
selectedProduct: {},
productInfo: null
};
然后在toggleModal中,每当toggleModal设置状态时,您需要检查modalOpen是否为true,然后进行apiCall。我假设apiCall是这里返回产品信息的端点
toggleModal = product => {
this.setState({ selectedProduct: product });
this.setState(prevState => ({modalOpen: !prevState.modalOpen}), () => {
if (this.state.modalOpen) {
//Make an api call
fetch(apiCall).then(res => {
this.setState({productInfo: res.data });
});
}
});
};
在模态中传递与道具相同的状态:
<Modal
product={this.state.selectedProduct}
closeButton={this.toggleModal}
productInfo={this.state.productInfo}
/>
或者
在单击的同一函数中进行另一个api调用,因为在该单击项的帮助下,您正在调用另一个api。正确的?
<Modal
product={this.state.selectedProduct}
closeButton={this.toggleModal}
productInfo={this.state.productInfo}
/>