Lai*_*llu 8 meteor ecmascript-6 reactjs
我正在使用React教程研究Meteor并尝试理解createContainer().从这里阅读:
http://guide.meteor.com/v1.3/react.html#using-createContainer
我认为它定义的函数meteor/react-meteor-data用于数据加载.在这种特定情况下,它从Mini Mongo数据库(Task此处命名)中检索数据.我的问题是,createContainer的第二个参数是做什么的?(App在此命名).谢谢!
class App extends Component {
//...class definition
}
export default createContainer(() => {
return {
//Tasks is a Mongo.Collection
//returns the matching rows (documents)
//here we define the value for tasks member
tasks: Tasks.find({}, { sort: { createdAt: -1} }).fetch(),
};
}, App);
Run Code Online (Sandbox Code Playgroud)
使用createContainer创建的组件是一个围绕实际组件的简单包装器,但它的强大之处在于它可以处理Meteor对您的反应性,因此您不必考虑如何在数据更改时保持最新状态(例如订阅)加载,ReactiveVar/Session var更改)
一个React组件基本上只是一个JavaScript函数,它用一堆参数(props)调用它产生一个输出.除非您这样说,否则React不知道您的数据是否已更改.使用createContainer创建的组件将在您的被动数据更改时重新呈现,并向您的实际组件发送一组新的道具.
createContainer的选项是一个函数,它返回您想要的反应数据以及要包装的组件.它非常简单,createContainer的render函数实际上只有一行:
return <Component {...this.props} {...this.data} />;
Run Code Online (Sandbox Code Playgroud)
它会传递您传递给包装组件的任何道具,并添加您设置的反应数据源.
你可以在这里看到自己的代码:https://github.com/meteor/react-packages/blob/devel/packages/react-meteor-data/createContainer.jsx
该<Component {...this.props}语法被称为一个图示,基本上变成:
{
prop1: 'some value',
prop2: 'another value'
}
Run Code Online (Sandbox Code Playgroud)
成:
<Component prop1='some value' prop2='another value />
Run Code Online (Sandbox Code Playgroud)
(见:https://facebook.github.io/react/docs/jsx-spread.html)
问了同事,得到的答案是:
createContainer的第二个参数是您想要封装数据的类名。它将具有“反应数据”,因为每次数据库中的数据发生更改时,该类的 props 都会更改以包含新数据。
此外,应该在类定义之外调用 createContainer() 函数。
如果有人有什么要补充的,请随时贡献。