微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?