从ObservableList <int>添加或删除元素时未触发反应

问题描述

我有这样的代码

use warnings;
use strict;

my @array = (0,undef,3);

if (grep {! defined} @array) {
    print "undefined values in array\n";
}

我遇到的一个问题是class QuestionnaireMultiselectCheckBoxWrapperStore = _QuestionnaireMultiselectCheckBoxWrapperStore with _$QuestionnaireMultiselectCheckBoxWrapperStore; abstract class _QuestionnaireMultiselectCheckBoxWrapperStore with Store { final QuestionRes questionData; final QuestionObservable questionStore; Reactiondisposer _validationdisposer; _QuestionnaireMultiselectCheckBoxWrapperStore( {this.questionData,this.questionStore}) { answerIds = questionStore.answerIds.map((e) => e.id).toList().asObservable(); _validationdisposer = reaction((_) => answerIds,validateAnswerIds); } void dispose() => _validationdisposer?.reaction?.dispose(); //----- @observable ObservableList<int> answerIds; @action void setAnswerId(int id,bool remove) { if (remove) answerIds.removeWhere((e) => e == id); else answerIds.add(id); questionStore.setAnswerId(id,remove); } @observable String errorText; @action void validateAnswerIds(ObservableList<int> answers) { if (answers.isEmpty && questionData.isMandatory) { errorText = "ANSWER_required_ERROR"; } else errorText = null; } } 所做的更改后未触发validateAnswerIds

可以通过将validateAnswerIds函数更改为以下内容解决此问题:

setAnswerId

因此基本上是通过放弃ObservableList的主要功能来实现的,该功能主要是对元素的操作做出反应,从而有利于更改对对象的引用。可以在常规 @action void setAnswerId(int id,bool remove) { var tmpList = List<int>(); tmpList.addAll(answerIds); if (remove) { tmpList.removeWhere((e) => e == id); } else { tmpList.add(id); } answerIds = tmpList; questionStore.setAnswerId(id,remove); } 上完成。这使List毫无用处,因此肯定有一个我几乎没有错过的收获。

根据netlify guide

在列表中添加项目,删除项目或在某个索引处修改项目时,列表不会通知MobX。要获得反应性行为,必须使用ObservableList。

那么我的代码中是否有错误,或者ObservableList的使用意图与我不同?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...