流星的跟踪器函数如何执行与之前的反应容器函数createContainer不同?

问题描述:

以下是withTracker()函数调用的示例,其中包括在Javascript中使用顺序括号。流星的跟踪器函数如何执行与之前的反应容器函数createContainer不同?

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); 

前者反应容器反应的组分在流星是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); 

是什么在这两个函数的执行有什么区别?

有一个在他们的执行没有什么区别,因为withTracker仅仅是createContainer调用的包装:

meteor:react-packages source code

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

或者,如果你喜欢:

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

以下是您可以使用的两种可能的语法,显示一个函数+变量E在传递。

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); 

您通常需要第二次,你会通过(“返回”)他们到组件之前设置数据订阅,但有时第一“快捷方式'的语法是有用的,当你只是想传递一些现有的东西到组件。