【发布时间】:2019-05-14 00:36:01
【问题描述】:
我有一个 CommentList 组件和一个 CommentForm 组件。我的 CommentList 有一个处于其状态的 CommentForm 组件数组,称为 cmets。
这是 CommentList 的渲染:
render () {
return (
<div>
<button type='button' className='btn btn-default' onClick= {this.onAddComment}>Ajouter commentaire</button>
<br /><br />
{this.state.comments}
</div>
)
}
这是我作为道具传递给孩子的删除方法。
onDelete (i) {
var comments = this.state.comments
delete comments[i]
this.setState({ comments: comments })
}
我刚刚意识到删除不起作用,除非我将“this.state.cmets”包装在这样的 div 中:
render () {
return (
<div>
<button type='button' className='btn btn-default' onClick={this.onAddComment}>Ajouter commentaire</button>
<br /><br />
<div>
{this.state.comments}
</div>
</div>
)
}
}
我知道我需要在渲染之前将我的组件包装在一个 div 中,但是为什么除非我包装我的列表,否则删除不起作用?
编辑:
这是我用来设置状态和填充我的 cmets 数组的函数
loadComments () {
Axios.get(`${API}/${this.props.candidate_id}/comments.json`)
.then(response => {
let comments = response.data.map((obj, index) => {
return (
<CommentForm
key={index}
index={index}
baskets={this.state.baskets}
comment={obj}
onDelete={this.onDelete}
candidate_id={this.props.candidate_id} />
)
})
this.setState({ comments: comments })
})
}
【问题讨论】:
-
这没有任何意义。如果你的
comments变量是一个对象(我猜是的,因为你使用了delete关键字)你不能把它放到 JSX 中。你的应用应该会立即崩溃。 -
它是一个组件数组,我不能在一个组件上使用delete关键字吗?我在问题中添加了设置状态的函数
-
您不能在数组上使用
delete关键字。我的意思是,你可以,但这不是一个好的选择。请改用切片或拼接。 -
但是为什么除非我将它包装在一个 div 中,否则它不起作用?
-
您能否介绍一下
comments的基本结构以及onDelete方法是如何被调用的?
标签: reactjs