【发布时间】:2020-05-07 23:43:47
【问题描述】:
我正在创建一个简单的应用程序,它通过映射工作订单(第一个 API)来创建“卡片”。通过这个 API,需要一个 workersId 从第二个 API 获取工人数据。
这是我的 App.js
class App extends React.Component{
constructor(props){
super(props);
this.state = {
orders:[],
workersData: []
};
}
componentDidMount(){
fetch('https://www.hatchways.io/api/assessment/work_orders')
.then(res=> res.json())
.then(({ orders }) => {
this.setState({
orders: orders
}, () => {
this.state.orders.map(order => {
fetch(`https://www.hatchways.io/api/assessment/workers/${order.workerId}`)
.then(response=> response.json())
.then(workersData => {
this.setState({
workersData: workersData
})
})
})
});
})
.catch(err => {
console.log(err)
});
}
render(){
const { orders, workersData } = this.state;
return(
<CardList orders={ orders } workersData={ workersData } />
);
}
}
export default App;
我将 'orders' 和 'workersData' 道具携带到我的 'CardList' 组件中,以便我可以尝试映射每条数据并将其放置在单独的卡片中。
const CardList = props => {
console.log(props) //<-- this contains the 'orders' and 'workersData'
const workOrderJsx = props.orders.map( order => (
<Col key={ order.id } md={6} >
<Card order={order} />
</Col>
))
return (
<ListGroup>
<MDBContainer fluid={true} >
<MDBRow>
{workOrderJsx}
</MDBRow>
</MDBContainer>
</ListGroup>
);
}
export default CardList;
这一切都很好,但我面临的问题是,通过映射订单,我只能得到带有订单的卡片。如何同时检索与orders 对象中的id 对应的工人信息?
const Card = props => {
console.log(props) //<-- only order data
let date = new Date( props.order.deadline * 1000 );
const newTime = date.toLocaleString()
return (
<div className="card-container">
<h1 className="order-name">{props.order.name}</h1>
<p className="ml-5 mr-4">{props.order.description}</p>
<div>
<h5> Worker: {props.order.workerId} </h5> //<-- this is where I need the workers info to go
</div>
<p className="date">{newTime}</p>
</div>
)
}
export default Card;
【问题讨论】:
-
如果我错了,请纠正我,但看起来你只会在你的 App 组件的状态下获得一个订单的
workersData。而是你想要this.setState(state => ({ workersData: [...workersData, newWorkerData]))
标签: javascript reactjs api mapping react-props