Meteor的withTracker函数与前一个反应容器函数createContainer的执行方式有何不同?

时间:2017-10-08 14:48:49

标签: javascript meteor

以下是withTracker()函数调用的示例,其中包括在Javascript中使用顺序括号。

export default withTracker(props => {
    const handle = Meteor.subscribe('todoList', props.id);
    return {
        currentUser: Meteor.user(),
        listLoading: !handle.ready(),
        tasks: Tasks.find({ listId: props.id }).fetch(),
    };
})(Foo);

Meteor中React组件的前反应容器是createContainer()函数,为了与上述相同的目的,它被称为如下所示。

export default FooContainer = createContainer(props => {
  const handle = Meteor.subscribe('todoList', props.id);
  return {
    currentUser: Meteor.user(),
    listLoading: ! handle.ready(),
    tasks: Tasks.find({ listId: props.id }).fetch(),
  };
}, Foo);

这两个功能的执行有什么区别?

2 个答案:

答案 0 :(得分:2)

执行时没有区别,因为withTracker只是createContainer调用的包装器:

来自here

const withTracker = fn => C => createContainer(fn, C);

或者,如果您愿意:

function withTracker(fn) {
  return function(C) {
    return createContainer(fn, C);
  }
}

答案 1 :(得分:0)

以下是您可以使用的两种可能的语法,显示传入的函数+变量。

const someContainer = withTracker((props) => ({
  someFunction(parms) { ..function code },
  someVariable: value,
}))(ComponentName);

const someContainer = withTracker((props) => {
  const someFunction = (parms) => { ..function code };
  const someVariable = value;
  return {
    someFunction,
    someVariable,
  }
})(ComponentName);

您通常需要第二个,因为在将它们传递('返回')到组件之前,您将设置数据订阅,但有时当您只想将一些现有内容传递给组件时,第一个“快捷方式”语法很有用。成分