реагировать на родное значение mobx не примитивно

Я создаю собственное приложение для реагирования и использую mobx. в магазин у меня есть массив под названием tools, когда я пытаюсь присвоить значения в массив, я получаю массив

Обнаружено неперехваченное исключение, которое было сгенерировано компонентом реакции или наблюдателя, в: 'Reaction [Reaction @ 1] Error: [serializr], это значение не является примитивным: 14 "

 class Task {
@persist @observable id = ''
@persist @observable title = ''
@persist @observable description = ''
@persist @observable tools = []

constructor(id,title,description,tools){
    console.log('new task')
    console.log(id,title,description,tools)
    this.id = id
    // this.title = title
    this.description = description
    this.tools = tools;

}

TasksStore - здесь я создаю новый объект Task.

    import { observable, action, computed } from 'mobx'
import { persist } from 'mobx-persist'
import Task from '../Task/Task'
class TasksStore {

    @persist('list',Task) @observable tasks = []
    @observable storeHydrated = false;


    @action done(){
        this.storeHydrated = true

    }

    @action addNewTask(task){
        this.tasks.push(new Task(0,task.title,task.description,task.tools))
        console.log('tasks is',this.tasks)
    }






}


const taskStore = new TasksStore();
export default taskStore;

когда я удаляю

    @persist @observable tools = []

приложение работает нормально.


person Manspof    schedule 07.04.2018    source источник
comment
Какое примерное значение task.tools, которое вы предоставляете?   -  person Pritish Vaidya    schedule 10.04.2018
comment
что ты имеешь в виду?   -  person Manspof    schedule 11.04.2018
comment
Я считаю, что это связано с mobx-persist. Не могли бы вы опубликовать свой hydrate(..) код и Task курс?   -  person Stackia    schedule 12.04.2018


Ответы (2)


@persist('list') @observable tools = [] 

попробуйте установить тип инструментов. Это будет работать

person Sandy    schedule 25.07.2018
comment
Это правильный ответ; другими словами, если вы находитесь внутри декоратора, вам нужно объявить опору как tools: [persist('list'), observable]. persist недостаточно. Вам нужно persist('list') - person jeevium; 03.11.2019

У меня была та же проблема, решение - сделать сериализуемый класс Task следующим образом:

class Task {
 @serializable @observable id = ''
 @serializable @observable title = ''
 @serializable @observable description = ''
 @serializable(list(primitive()))   @observable tools = []

constructor(id,title,description,tools){
  console.log('new task')
  console.log(id,title,description,tools)
  this.id = id
  // this.title = title
  this.description = description
  this.tools = tools;  
}

И сохраните свою сериализуемую задачу в своем магазине:

class Store{
  @persist('object', Task)
  @observable
  public Task= new Task()
}
person Ralph de Ruijter    schedule 16.11.2018