У меня такая структура
class App extends Component {
constructor(props) {
super(props);
this.state = {
posts: [],
}
}
render() {
return (
<div className="App">
{this.state.posts.map((item, index) => (
<Post
key={item.id}
dataID={item.id}
title={item.title}
content={item.body}
/>
))}
</div>
);
}
}
Компонент post
class Post extends Component {
modifyItem(e) {
let target = e.target;
let targetID = target.getAttribute('data-id');
console.log(targetID, 'target id');
}
deleteItem(e) {
let target = e.target;
let targetID = target.getAttribute('data-id');
fetch(`https://my-json-server.typicode.com/sergemin/render-list/posts/${targetID}`, {
method: 'DELETE'
})
.then(() => {
console.log(targetID);
})
.catch(error => console.log(error));
}
render() {
return (
<article className="post-list__item post-item">
<div className="post-item__inner">
<div className="post-item__buttons buttons-block">
<button className="buttons-block__change"
onClick={this.modifyItem}
data-id={this.props.dataID}
>..</button>
<button className="buttons-block__delete"
onClick={this.deleteItem}
data-id={this.props.dataID}
>x</button>
</div>
<h3 className="post-item__title">{this.props.title}</h3>
<p className="post-item__body">{this.props.content}</p>
</div>
</article>
)
}
}
Post.defaultProps = {
title: PropTypes.string.isRequired,
content: PropTypes.string
};
post - это компонент, в нем есть два обработчика для двух кнопок на клик. Одна для удаления, а вторая для правки.
Но дело в том, что если у меня обработчик лежит внутри Post, а массив с этими постами лежит в state в App, то как я могу удалить один элемент из state другого компонента? Точнее, как я из дочернего компонента могу передать информацию об изменениях?
Я сначала думал, что функцию-обработчик нужно вынести в компонент App и при
{this.state.posts.map((item, index) => (
<Post
key={item.id}
dataID={item.id}
title={item.title}
content={item.body}
/>
))}
Повесить онклик и с ним работать, а в Post передать онклик через пропс, но дело в том, что внутри компонента Post две независимые кнопки, на которых должен быть онклик
Как быть?