react-komposer,依赖于其他作曲家函数提供的道具的作曲家函数

时间:2016-04-09 15:58:01

标签: meteor reactjs ecmascript-6

您好我试图编写依赖于其他作曲家函数提供的道具的作曲家函数。

这个提供道具名为a

import {useDeps, composeWithTracker, composeAll} from 'mantra-core';
import Component from '../components/component';

export const composerA = ({context, _id}, onData) => {
  const {Meteor,Collections} = context();
  const query = {_id};
  if (Meteor.subscribe('a', query).ready()) {
    const a = Collections.A.findOne(query);
    onData(null,{a});
  }
};

这个取决于在名为a的道具上。

// depends on `prop` named `a` which is provided  by `composerA`
export const composerB = ({context, a}, onData) => {
  const {Meteor,Collections} = contex();
  if(a){
    const query = {a_id : a._id};
    if (Meteor.subscribe('b', query).ready()) {
      const bs = Collections.B.find(query);
      onData(null,{bs});
    }
  }
};

如果没有依赖关系,它可以正常工作。

export const ThisWorks = compoaseAll(
  composeWithTracker(composerA),
  // some other composer function without dependency 
  composeWithTracker(composerWithoutDependency)
)(Component);

但是当我用composerB编写它时,它取决于A它会永远加载/等待。

export const ThisLoadsForever = composeAll(
  composeWithTracker(composerA),
  composeWithTracker(composerB)
)(Component);

我也试过这样做

export const temp = composeAll(
  composeWithTracker(composerA)
)(Component);
export const StillLoadsForever = composeAll(
  composeWithTracker(composerB)
)(temp);

我怀疑道具a永远不可用或不为composerB,因此永远等待/加载。 我该如何解决?或者还有其他方法来组成具有依赖性的作曲家吗?

PS:我使用的是mantra-js。

1 个答案:

答案 0 :(得分:2)

composeAll从右到左编写功能。如果依赖于componentB中componentA的prop,则需要将componentB放在componentA:

之上

export const ThisLoadsForever = composeAll( composeWithTracker(composerB), composeWithTracker(composerA) )(Component);

相关问题