Лучший способ получить лайки из поста - включить его в свой бэкэнд-вызов API myPosts
.
как это
router.get('/myPosts', async (req, res) =>{
await models.Post.findAll({
include:[{
model:models.Likes
}],
order:[
['createdAt', 'DESC'],
], limit: 6 })
.then( (posts) =>{
res.json(posts);
})
});
таким образом, только этот конкретный пост будет получать количество лайков для этого поста.
и это можно так назвать
PostItem.js
....
<Like like={id} likes={Likes.length} />
Like.js
import React, { Component } from 'react';
import ReactDOM from 'react-dom'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faCoffee, faAdjust } from '@fortawesome/free-solid-svg-icons';
import {connect} from 'react-redux';
import { getLikeCount, postLike} from '../actions/';
class Like extends Component{
constructor(props){
super(props);
this.state = {
likes: null,
heart: false
}
}
clickLike = (id) => {
this.props.postLike(id);
// toggles between css class
this.setState({
heart: !this.state.heart
})
}
render(){
return(
<div style={{float:'right', fontSize: '1.5em', color:'tomato'}} >
<i style={{ marginRight: '140px'}} className={this.state.heart ? 'fa fa-heart':'fa fa-heart-o' }>
<span style={{ marginLeft: '6px'}}>
<a href="#" onClick={ () => this.clickLike(this.props.like)}>Like</a>
</span>
{/* gets the like counts */}
{this.props.likes}
</i>
</div>
)
}
}
const mapStateToProps = (state) => ({
isEditingId: state.post.isEditingId,
likeCount:state.post.likes
})
const mapDispatchToProps = (dispatch) => ({
postLike: (id) => dispatch( postLike(id))
});
export default connect(mapStateToProps, mapDispatchToProps)(Like);