在xState中将事件从一台计算机发送到另一台计算机时传递值 [英] Pass values when sending events from one machine to another in xState

查看:126
本文介绍了在xState中将事件从一台计算机发送到另一台计算机时传递值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a simple chatMachine that invokes a todoMachine. The todoMachine has an event called 'OPENED_TASK_LIST_CREATOR' which I want to invoke from chatMachine. I've managed to figure this out.

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.我已经成功地在COMMENT_STARRED中的send操作上方使用(ctx, e) => console.log('e.payload', e.payload),记录了它.

The problem I am having is that I want to send a value along with the 'OPENED_TASK_LIST_CREATOR' event. Namely the list id I want opened. I have managed to log it with (ctx, e) => console.log('e.payload', e.payload), just above the send action in COMMENT_STARRED.

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

Is there a way to passe.payload to send('OPENED_TASK_LIST_CREATOR', { to: 'todo' }) so that I can use the value in todoMachine?

推荐答案

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

这篇关于在xState中将事件从一台计算机发送到另一台计算机时传递值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆