Отправка данных с родительского компьютера на дочерний компьютер с использованием акторов - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь понять, как актеры могут передавать данные из одного и того же компонента в другой.

У меня есть эти машины: родительский и дочерний. parentMachine отправляет событие GET на childMachine при переходе success. Как только childMachine получает event.value, его следует назначить свойству user в его контексте.

const [currentChild, sendChild] = useMachine(childMachine);

Теперь, когда я регистрирую currentChild.context после нажатия кнопки выборки, свойство user опорожнить. Как использовать данные, полученные из parentMachine в компоненте, который зависит от childMachine?

CodeSandbox: https://codesandbox.io/s/patient-frost-9lxoh

const parentMachine = Machine({
  id: "parent",
  initial: "idle",
  context: {
    ref: undefined
  },
  states: {
    idle: {
      on: {
        FETCH: {
          target: "loading"
        }
      }
    },
    loading: {
      invoke: {
        id: "getUser",
        src: (_, event) => fetchUser(event.value),
        onDone: {
          target: "success",
          actions: assign({
            user: (_, event) => {
              return event.data;
            }
          })
        },
        onError: {}
      },
      entry: assign({
        ref: () => spawn(childMachine)
      })
    },
    success: {
      entry: (ctx, evt) => ctx.ref.send({ type: "GET", value: ctx.user })
    },
    failure: {} 
  }
});

const childMachine = Machine(
  {
    id: "child",
    initial: "waitingForData",
    context: {
      user: []
    },
    states: {
      waitingForData: {
        on: {
          GET: {
            actions: [
              assign({
                user: (ctx, evt) => [...ctx.user, evt.value]
              }),
              "logger"
            ]
          }
        }
      }
    }
  },
  {
    actions: {
      logger: ctx => console.log(ctx.user)
    }
  }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...