3 回答

TA贡献1820条经验 获得超10个赞
你的意思是这样的:
if (!this.answers.find(a => a.id === answer.answer_id)) {
this.answers.push(/* ... */);
}

TA贡献1851条经验 获得超3个赞
你所做的或多或少是正确的。无法从循环中逃脱。但是,有些事情您可以改进。相反forEach,您可以使用Array.somemethod。或者,您可以使用Array.find方法:
eventBus.$on('answer-added', answer => {
// Instead of using forEach, you can use Array.some() method
const answerExists = this.answers.some((x) => e.id == answer.answer_id);
if (!answerExists) {
this.answers.push({
id: answer.answer_id,
answer: answer.answer_text
});
}
});
其次,使用事件总线没有问题,但一般用于兄弟或跨组件通信。当所有组件都在同一个祖先或父层次结构中时,使用$emitfor 事件是正确的方法。
在您的情况下,即使您有一个嵌套的组件层次结构,随着应用程序的发展,层次结构会变得非常深,您将很快失去对事件总线的典型发布订阅机制的跟踪。即使这意味着从中间组件重新发出相同的事件,您也应该遵循这种做法。
添加回答
举报