流星的跟踪器函数如何执行与之前的反应容器函数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);
您通常需要第二次,你会通过(“返回”)他们到组件之前设置数据订阅,但有时第一“快捷方式'的语法是有用的,当你只是想传递一些现有的东西到组件。