【发布时间】:2021-04-21 01:57:58
【问题描述】:
我在构建 React 项目时经常遇到一个问题 - 我需要在组件中添加一个 prop,但由于它违反了 props 的单向流而无法访问它。
这是我现在遇到的具体问题:
在我的CafeReviews.jsx 组件中,我需要访问一条数据averageRating - 但是,此属性包含在子组件Review.jsx 中。
所以我需要在CafeReviews 中访问这些数据,这样我就可以将它作为道具传递给<CafeHeader/>。
有什么想法可以解决这个问题,而无需重组我的组件?
这是父组件CafeReviews.jsx
import React,{useState, useEffect} from 'react'
import axios from 'axios'
import Review from './Review'
import CafeHeader from './CafeHeader'
const CafeReviews = ({ match }) => {
const [cafe, setCafe] = useState([]);
const [reviews, setReviews] = useState([]);
useEffect(() => {
axios.get(`/api/cafe/${match.params.id}`).then((result) => {
setCafe(result.data);
})
axios.get("http://localhost:5000/api/all-reviews")
.then((review) => {
setReviews(review.data);
})
.catch((err) => {
console.log(err);
})
}, [])
let filteredReviews = reviews.filter((review) => {
return review.cafeName === cafe.cafeName;
});
return (
<div>
<CafeHeader cafe={cafe} />
<div className="reviews-container">
<Review reviews={filteredReviews} />
</div>
</div>
)
}
export default CafeReviews
...还有一个子组件Review.jsx,包含我要访问的averageRating 属性:
import React from 'react'
import axios from 'axios'
import {convertToStars, averageStarRating} from '../helperFunctions'
const Review = (props) => {
const { reviews } = props;
const handleClick = (id) => {
axios
.delete(`/api/reviews/${id}`)
.then(() => {
console.log("review successfully deleted");
})
.catch((err) => {
console.log(err);
})
}
return (
<div>
{
reviews.map((review) => {
const { title, userName, blurb, stars, _id } = review;
const starRating = convertToStars(stars)
const averageRating = averageStarRating(reviews)
return (
<div className = 'review-container'>
<h1>{title}</h1>
{starRating.map((item) => {
return item
})}
<h2>{`Review by: ${userName}`}</h2>
<p>{blurb}</p>
<button onClick={() => handleClick(_id)}>Delete</button>
</div>
)
})
}
</div>
)
}
export default Review
【问题讨论】:
标签: reactjs