在 xstate 中嵌套 属性 赋值?

Nested property assign in xstate?

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

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

但是你能这样用吗?

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

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

David Kourship(xstate 的创建者)answered Spectrum 上的这个:

No you cannot, but you can make a custom assign function that does that.

所以我们基本上必须创建一个自定义化简器,它有选择地只更新嵌套对象中的一个字段。

我想你可以尝试这样的事情:

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

您将用所需值和 context 替换 foo.bar 值,其余 context.foo 保持不变