0

假设我有一台具有单一状态的机器,它提供动作递增或递减一个值。

const Machine({
    id: 'some_machine',
    initial: 'initial',
    context: {
        value: 0
    },
    states: {
        'initial': {
            on: {
                'inc': {
                    actions: assign({
                        value: (ctx) = {
                            return ctx.value + 1
                        }    
                    })
                },
                'dec': {
                    actions: assign({
                        value: (ctx) = {
                            return ctx.value - 1
                        }    
                    })
                }
            }
        }
    }
} 

是否可以在执行任何其他操作之后initial以某种方式在该映射中指定一个操作?作为一个例子,我可能希望每次都乘以and的结果。context incdec

我意识到我可以在两者之后添加一个动作incdec但如果这在一个地方以某种方式可行,我很感兴趣。

4

1 回答 1

2

本质上,你想做两件事:

  1. 每当您进入特定状态时执行一个动作(例如,乘法)
  2. 'inc'每当发生某些事件(例如和)时,重新进入该特定状态'dec'

在状态上定义一个进入操作,以便重新进入该状态(即使您已经处于该状态):'initial'target: 'initial'

Machine({
  id: "some_machine",
  initial: "initial",
  context: {
    value: 0
  },
  states: {
    initial: {
      entry: assign({
        value: ctx => ctx.value * 2
      }),
      on: {
        inc: {
          target: "initial",
          actions: assign({
            value: ctx => {
              return ctx.value + 1;
            }
          })
        },
        dec: {
          target: "initial",
          actions: assign({
            value: ctx => {
              return ctx.value - 1;
            }
          })
        }
      }
    }
  }
});
于 2020-07-12T17:56:04.850 回答