在xstate中分配嵌套属性?

时间:2019-11-20 00:20:45

标签: state state-management xstate

我知道您可以像这样使用assign动作创建者:

const setFoo = assign({
  foo: (context, event) => "someValueBasedOnContextAndEvent",
});

但是您可以这样使用它吗?

const setFoo = assign({
  foo: {
    bar: (context, event) => "someValueBasedOnContextAndEvent",
  }
});

当然,不删除foo的所有其他嵌套值。

2 个答案:

答案 0 :(得分:0)

David Kourship(xstate的创建者)answered在Spectrum上是这样的:

  

没有,您不能,但是您可以创建一个自定义的赋值函数来完成此任务。

因此,我们基本上必须创建一个自定义的reducer,以选择性地更新嵌套对象中的一个字段。

答案 1 :(得分:0)

我认为您可以尝试这样的事情:

const setFoo = assign({
    foo: (context, event) => {
        ...context, 
        foo: {
            ...context.foo,
            bar: "someValueBasedOnContextAndEvent"
        }
    },
});

这将用所需的值替换foo.bar的值,并且contextcontext.foo的其余部分保持不变