Я пытаюсь вызвать метод deletePost (index), который находится в классе ShowPost, из кнопки, которая динамически отображается на этапе render () в React. Кнопка с надписью «щелкни меня» может быть вызвана и будет печатать первую позицию (также известную как [0]) моего массива this.state.posts, в то время как кнопки с надписью «Удалить», которые были динамически создал код взлома. Это дает мне TypeError: невозможно прочитать свойство deletePost из undefined. Я думаю, что мне нужно каким-то образом «передать» метод deletePost моим «внутренним» компонентам (также известным как кнопки), которые визуализируются динамически?
class ShowPost extends Component {
constructor(props) {
super(props);
this.state = {
posts: []
};
this.setState = this.setState.bind(this);
this.deletePost = this.deletePost.bind(this);
}
deletePost(index){
console.info(this.state.posts[index]);
}
render(){
return (
<React.Fragment>
<button onClick = {this.deletePost.bind(this, 0)} > click me </button>
<div className = "list-group">
{
this.state.posts.reverse().map(function(post,index) {
return <div key = {index} className = "list-group-item active">
<h4 className = "list-group-item-heading">{post.Title}</h4>
<p className = "list-group-item-text">{post.Subject}</p>
<button onClick = {this.deletePost.bind(this, 0)} > Delete </button>
</div>
})
}
</div>
</React.Fragment>
)
}
}
export default ShowPost;Благодарность! это помогло. когда лучше использовать функцию () вместо стрелок? пока кажется, что стрелочная функция в целом лучше



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Поскольку кнопка рендеринга является функцией, вы не можете получить this. Измените на функцию стрелки.
this.state.posts.reverse().map(post => (
return <div key = {post.Id} className = "list-group-item active">
<h4 className = "list-group-item-heading">{post.Title}</h4>
<p className = "list-group-item-text">{post.Subject}</p>
<button onClick = {this.deletePost.bind(this, 0)} > Delete </button>
</div>
))
Другое дело, что вы должны использовать post.id в качестве ключа, а не индекса.
используйте функцию
arrowвместо нормальной функции для вашегоmap, напримерthis.state.posts.reverse().map((post,index) => {