【问题标题】:properly using Meteorjs with Reactjs?正确使用 Meteorjs 和 Reactjs?
【发布时间】:2014-12-28 11:03:09
【问题描述】:

我已经添加了“meteor-react”包,并且正在阅读显微镜教程。在此过程中,我只是将 Blaze 模板步骤替换为 React,但我不确定如何正确执行此操作,以使 Collections 与 Reactjs 框架发生反应。

“帖子”是一个 mongo 集合。 在我的 main.js 中:

// Startup application
Meteor.startup(function() {
   var target = document.getElementsByTagName('body')[0]; 
   var data = Posts.find().fetch();  // RACE CONDITION occurs here.
   React.renderComponent(new StreamAtom({ "data": data}), target);
});

在 StreamAtom.jsx react 组件中,“数据”被简单地设置为初始状态。

问题:

Posts.find().fetch() 存在竞争条件,因此大多数时候页面不会呈现。 Meteor 中没有回调,Blaze 处理没有回调的“ Posts.find() ”,所以我错过了什么?

另外,我如何只使用 Posts.find() 而不使用 fetch?由于 fetch() 返回的是结果数组而不是 Mongo 游标,恐怕 React 实际上不会对集合的更改做出反应。

非常感谢,

我希望这能帮助我更好地了解流星。

【问题讨论】:

    标签: meteor reactjs


    【解决方案1】:

    将 React 渲染函数调用包装到 Tracker.autorun - 这是 Meteor 的大部分客户端反应发生的方式:

    // Startup application
    Meteor.startup(function() {
      Tracker.autorun(function () {
       var target = document.getElementsByTagName('body')[0]; 
       var data = Posts.find().fetch();  // RACE CONDITION occurs here.
       React.renderComponent(new StreamAtom({ "data": data}), target);
      });
    });
    

    Tracker 综合指南:https://github.com/meteor/meteor/tree/devel/packages/tracker

    【讨论】:

    • 非常感谢!有效。我很惊讶本教程没有提前提到它。 Blaze 会在内部运行吗?
    • Blaze 在帮助程序和数据上下文上无缝运行 Autoruns,然后在没有显式渲染的情况下对 DOM 进行最低限度的修补。
    • 如何让 JSX 转换作为 Meteor 构建系统的一部分自动工作?
    • @GiantElk 你可以添加一个像这样的包:atmospherejs.com/reactjs/react,它集成了 react 构建工具链
    • 我会试试那个包,虽然我希望有一种更简单的方法来转换 JSX 。即,如果我想将 ReactJS 与 Iron-Router 一起使用,或者只是用于简单的静态视图网站而不访问 pub/sub。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2012-10-20
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    相关资源
    最近更新 更多