【问题标题】:Tonic getElementById()补品 getElementById()
【发布时间】:2016-03-07 11:09:53
【问题描述】:

我正在尝试在 tonicdev.com 上为我托管在 Npm 上的开源 React 组件设置一个代码示例。

这是我尝试运行的代码(在 tonicdev.com here 上实时编辑):

var React = require('react');
var ReactDOM = require('react-dom');
var {Calendar, CalendarControls} = require('react-yearly-calendar');

function onDatePicked(date) {
  alert(date);
}

ReactDOM.render(
  <Calendar
    year={2016}
    onPickDate={onDatePicked}
  />,
  document.getElementById('calendar')
);

Tonic 抱怨,因为它没有 document 选择器:

节点中没有文档对象。 Tonic 是一个节点环境,因此不会存在文档和其他浏览器功能。

但它没有提供替代方案。由于这是一个 React 组件,我应该使用 ReactDOM.render 渲染它,它需要 domContainerNode 作为第二个参数。如何在补品中获得一个?

更笼统地说:我做错了什么吗?有没有办法在 Tonic 中运行 React 示例?

【问题讨论】:

  • 您可以使用 renderToString 在 Tonic btw 中执行此操作。 tonicdev.com/tolmasky/56ec2fcc5029631100e6518c
  • @FranciscoRyanTolmaskyI 太酷了!我猜那是只读的,不是吗?我的意思是,我不能在 React 中有任何 onClick 处理程序,对吧?

标签: javascript reactjs npm tonic


【解决方案1】:

加维诺,你完全错了。 Tonic 是一个节点原型服务,这意味着它允许你运行/测试 nodeJS 的代码。

您可能已经知道,nodeJS 是一个后端服务,这意味着它是服务器端的。因此,document 或任何其他特定于浏览器的(客户端功能)不可用。

使用nodeJS 将数据从您的服务器获取到/public 文件夹,因为这是您要使用以下内容的地方:

function onDatePicked(date) {
  alert(date);
}

ReactDOM.render(
  <Calendar
    year={2016}
    onPickDate={onDatePicked}
  />,
  document.getElementById('calendar')
);

【讨论】:

  • 你是对的!我认为 Tonic 在 npm-ish 环境中就像 jsbin 或类似的,所以我打算用它来让人们在不下载的情况下预览组件。谢谢你的回答!
  • @GavinoGrifoni 如果答案是正确的,您可以接受我的回答,以便问题被标记为已解决。
猜你喜欢
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 2010-10-08
相关资源
最近更新 更多