Reactjs 如何在React with Coffeescript中呈现HTML标记?
我目前正在学习ReactJS以及如何使用RubyonRails作为其后端,所以如果我做出了愚蠢的假设,我很抱歉,请随意责骂我 我遵循一个教程,作者使用Coffeescript而不是ES6来处理他的ReactJS代码 他提供了一个与此类似的示例组件(coffeescript): 这有两个错误。第一个是关于Reactjs 如何在React with Coffeescript中呈现HTML标记?,reactjs,coffeescript,ruby-on-rails-5,Reactjs,Coffeescript,Ruby On Rails 5,我目前正在学习ReactJS以及如何使用RubyonRails作为其后端,所以如果我做出了愚蠢的假设,我很抱歉,请随意责骂我 我遵循一个教程,作者使用Coffeescript而不是ES6来处理他的ReactJS代码 他提供了一个与此类似的示例组件(coffeescript): 这有两个错误。第一个是关于React.createClass,我发现它已被弃用,不再工作。相反,我使用的是createReactClass。好。但是现在,React.DOM.h1给出了一个错误,表示uncaughttype
React.createClass
,我发现它已被弃用,不再工作。相反,我使用的是createReactClass
。好。但是现在,React.DOM.h1
给出了一个错误,表示uncaughttypeerror:无法读取未定义的
的属性“h1”,这与我使用的其他HTML标记相同。我认为这是因为createReactClass
没有提供以前由React.createClass
提供的必要功能
无论如何,在研究与此间接相关的另一个错误时:
因此,切断React.DOM
部分。这会产生另一种类型的错误,即:uncaughtreferenceerror:div未定义
。同样,我假设这是由于对React.createClass
的更改
有没有一种方法可以使用React with CoffeeScript,这样我就可以这样使用它:
@Rows = createReactClass
render ->
div
className: 'rows'
h1
className: 'title'
'Rows'
无需打开和关闭HTML标记,也无需React.DOM
我不知道这是否可能,或者它是否有效,或者是否有很多方法可以达到类似的效果。我只是想知道,在我深入思考之前,是否有办法做到这一点
谢谢
更新
我已经取得了一些进展,尽管我仍然有一个错误。我尝试了以下方法:
import React from 'react'
import ReactDom from 'react-dom'
{div, h1, p} = ReactDom
class Rows extends React.Component
render: ->
h1
className: 'col-md-12'
'Rows'
export default Rows
这会产生以下错误:
uncaughttypeerror:h1不是函数
您可以使用带有React而不带JSX的coffeescript。我认为这使得代码更加简洁:
React = require('react')
ReactDOM = require('react-dom')
{div, h1} = ReactDom
class Rows extends React.Component
render: ->
div
className: 'rows'
h1
className: 'title'
'Rows'
module.exports = React.createFactory Rows
reacadom
直接使用DOM元素以下是最终奏效的方法
React = require('react')
PropTypes = require('prop-types')
ReactDom = require('react-dom-factories')
createReactClass = require('create-react-class')
{div, h1} = ReactDom
Rows = createReactClass
render: ->
div
className: 'col-md-12'
h1
className: 'title'
'Rows'
export default Rows
所以我一直在使用React 16,令人难以置信的是,在过去的6个月中,有多少事情发生了变化。我是一个全新的反应者,所以我完全不知道这是如何工作的,但我成功地使用了上面的代码,没有错误
首先:
ReactDom = require('react-dom-factories')
这就是我错过的那个。我得到的错误是div
和h1
不是函数,或者没有定义。因此,React.DOM
现在作为React-DOM工厂
提供:
15.x中引入的弃用已从核心中删除
包裹React.createClass现在作为create React类提供,
React.PropTypes作为prop类型,React.DOM作为React DOM工厂,
react插件将测试utils作为react-dom/test-utils和浅层渲染器
作为反应测试渲染器/浅层
秒:
ReactDom = require('react-dom-factories')
如果其他任何人遇到此问题,并且您收到的错误表明找不到模块“react dom factories”
,这意味着您必须使用以下命令将它们添加到您的webpacker中:
yarn add react-dom-factories
如果您遵循上面的示例,您可能还必须添加创建反应类
和道具类型
最后:
确保您的coffeescript文件的扩展名为simple.coffee。如果使用.js.coffee
或.jsx.coffee
将出现无法找到组件的错误
我不能100%确定这是否必要,但在搜索解决方案时,我还将cjsx loader
添加到了我的webpacker中。这是一个用于Webpack的coffee react transform loader模块
更新:最后一部分不是必需的。我做了一个新项目,这一点都不是必需的。官方文档提供了所需的信息,除非我遗漏了什么,它们只提到XML元素,这些元素必须包含一个开始和结束标记。我的问题是如何像在我的第三个代码片段中那样使用它们(没有结束标记,只有缩进,coffeescript样式)。要使用类似jsx的语法进行编写,请看这正是我想要做的!现在,请原谅我的noob问题,我发现
require
没有定义。我会错过什么?我可以运行JSX格式的“标准”组件(当然,使用不同的代码),因此我认为问题不在我的应用程序.js
上。我更新了我的问题,并在您提供的帮助下取得了一些进展。我仍然有一个错误,但我想我越来越接近了。
ReactDom = require('react-dom-factories')
yarn add react-dom-factories