2

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

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

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

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

当然,在不删除所有其他嵌套值的情况下foo

4

2 回答 2

1

David Kourship(xstate 的创建者)在 Spectrum 上回答了这个问题:

不,你不能,但你可以制作一个自定义的分配函数来做到这一点。

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

于 2019-11-24T00:34:48.180 回答
0

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

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

您将用foo.bar所需的值替换该值,context其余部分context.foo保持不变

于 2019-12-01T22:57:04.047 回答