在xState中将事件从一台计算机发送到另一台计算机时传递值

时间:2019-02-28 06:41:02

标签: xstate

我有一个简单的chatMachine,它调用todoMachine。 todoMachine有一个名为“ OPENED_TASK_LIST_CREATOR”的事件,我想从chatMachine调用它。我设法弄清楚了。

export const chatMachine = Machine({
  id: 'chat',
  initial: 'idle',
  context: { message: '' },
  states: {
    idle: {
      invoke: {
        id: 'todo',
        src: todoMachine
      },
      on: {
        COMMENT_SUBMITTED: {
          actions: 'addComment'
        },
        COMMENT_STARRED: {
          actions: [
            (ctx, e) => console.log('e.payload', e.payload),
            send('OPENED_TASK_LIST_CREATOR', {
              to: 'todo'
            })
          ]
        }
      }
    }
  }
});

我遇到的问题是我想与'OPENED_TASK_LIST_CREATOR'事件一起发送一个值。即我要打开的列表ID。我已经成功地在(ctx, e) => console.log('e.payload', e.payload),中的send操作上方使用COMMENT_STARRED对其进行了记录。

是否可以将e.payload传递给send('OPENED_TASK_LIST_CREATOR', { to: 'todo' }),以便我可以使用todoMachine中的值?

1 个答案:

答案 0 :(得分:0)

COMMENT_STARRED: {
          actions: [
            (ctx, e) => console.log('e.payload', e.payload),
            send(
              (ctx, e) => ({
                type: 'OPENED_TASK_LIST_CREATOR',
                payload: e.payload
              }),
              {
                to: 'todo'
              }
            )
          ]
        }