首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我可以在react框架中使用pug (ex-jade)吗?

我可以在react框架中使用pug (ex-jade)吗?
EN

Stack Overflow用户
提问于 2016-06-18 09:53:46
回答 2查看 7.3K关注 0票数 9

我读过一些pug文档。它说我必须先安装pug,而我已经安装好了。然后,我必须在我的js文件中要求pug。但是我不知道在我的react文件中在哪里编写pug文件的编译?在react框架中使用pug的正确步骤是什么?谢谢!我真的很感谢任何人的帮助。这是我在react中的一个组件,我想用pug来呈现它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 import React from 'react';
 import Sidebar from './Sidebar';
 import Header from './header/Header';
 import {tokenverify} from '../../utils/helpers';
 import pug from 'pug';

 class Home extends React.Component {
   componentDidMount() {
     const token = localStorage.getItem('token')
     tokenverify(token)
     .catch((res) => {
       this.props.history.push('/')
     })
   }

   render() {
     return(
       <div className="main-container">
         <div className="col-md-1">
           <Sidebar history={this.props.history} username={this.props.params.username}/>
         </div>
         <div className="col-md-11">
           <div className="row">
             <Header history={this.props.history} username={this.props.params.username} />
           </div>
           <div className="row">
             {this.props.children}
           </div>
         </div>
       </div>
     )
   }
 }

 export default Home
EN

回答 2

Stack Overflow用户

发布于 2018-03-22 15:41:15

我发现这个项目的开发还处于非常早期的阶段:https://github.com/bluewings/pug-as-jsx-loader

我喜欢它,因为它可以让我把我的哑巴(表象) react组件写成pug模板。

它目前唯一支持的JSX功能是迭代和条件if。这对于编写大多数哑巴组件来说似乎已经足够好了。

以下是使用它的步骤

1.安装pug-as-jsx-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install pug-as-jsx-loader --save-dev

对于下一步,如果您使用的是create-react-app,则必须弹出

2.告诉webpack如何处理pug模板。

在你的webpack.config.dev.js中,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ test: /\.pug$/, use: [require.resolve('babel-loader'), require.resolve('pug-as-jsx-loader')] },

3.在组件中导入pug模板

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import myTemplate from './mycomponent.pug'

4.从呈现函数返回已编译的模板

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const MyComponent = ({someProperty, someOtherProperty})=> {
  return myTemplate.call({}, {
    someProperty,
    someOtherProperty
  });
};

5.定义pug以呈现组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#my-element
  ul.my-list
    li(key='{something.id}', @repeat='something as someProperty')
      div(className='planet')  {something.name}
      div(className='vehicle')   {something.type}
      div(className='overview') {something.cost} 
      div(className='cancel', onClick='{()=> someOtherProperty(something)}')
        div(className='no-mobile fa fa-remove')

读一读我的经历:https://medium.com/p/7610967954a

票数 5
EN

Stack Overflow用户

发布于 2017-02-19 03:33:26

使用Pug,您有两个选择:将模板呈现为HTML字符串,立即传递数据对象;或者将模板呈现给一个高效的javascript函数,该函数在传递数据对象时输出html。

当使用pug(单独)处理动态数据时,选择显然是编译成函数,这样数据就可以在客户机上应用。

但是,React实际上并不使用或发送给客户端html。如果您阅读了有关JSX的说明,您将看到它只是类似于HTML的语法糖,它被编译成一个javascript函数,该函数以编程方式创建DOM节点(对于React处理差异和更新页面的方式至关重要)。目前,即使在客户端,Pug也会输出一个HTML字符串。因此,我们能够使用它的唯一方式是dangerouslySetInnerHTML,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//from https://runkit.io/qm3ster/58a9039e0ef2940014a4425b/branches/master?name=test&pug=div%20Wow%3A%20%23%7Ba%7D%23%7Bb%7D
function pug_escape(e){var a=""+e,t=pug_match_html.exec(a);if(!t)return e;var r,c,n,s="";for(r=t.index,c=0;r<a.length;r++){switch(a.charCodeAt(r)){case 34:n="&quot;";break;case 38:n="&amp;";break;case 60:n="&lt;";break;case 62:n="&gt;";break;default:continue}c!==r&&(s+=a.substring(c,r)),c=r+1,s+=n}return c!==r?s+a.substring(c,r):s}
var pug_match_html=/["&<>]/;
function pug_rethrow(n,e,r,t){if(!(n instanceof Error))throw n;if(!("undefined"==typeof window&&e||t))throw n.message+=" on line "+r,n;try{t=t||require("fs").readFileSync(e,"utf8")}catch(e){pug_rethrow(n,null,r)}var i=3,a=t.split("\n"),o=Math.max(r-i,0),h=Math.min(a.length,r+i),i=a.slice(o,h).map(function(n,e){var t=e+o+1;return(t==r?"  > ":"    ")+t+"| "+n}).join("\n");throw n.path=e,n.message=(e||"Pug")+":"+r+"\n"+i+"\n\n"+n.message,n}function test(locals) {var pug_html = "", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {;var locals_for_with = (locals || {});(function (a, b) {;pug_debug_line = 1;
pug_html = pug_html + "\u003Cdiv\u003E";
;pug_debug_line = 1;
pug_html = pug_html + "Wow: ";
;pug_debug_line = 1;
pug_html = pug_html + (pug_escape(null == (pug_interp = a) ? "" : pug_interp));
;pug_debug_line = 1;
pug_html = pug_html + (pug_escape(null == (pug_interp = b) ? "" : pug_interp)) + "\u003C\u002Fdiv\u003E";}.call(this,"a" in locals_for_with?locals_for_with.a:typeof a!=="undefined"?a:undefined,"b" in locals_for_with?locals_for_with.b:typeof b!=="undefined"?b:undefined));} catch (err) {pug_rethrow(err, pug_debug_filename, pug_debug_line);};return pug_html;}
// pug source: "div Wow: #{a}#{b}"
// this would obviously be much shorter if you include pug-runtime globally in your application

function createMarkup(a,b) {
  return {__html: test({a:a,b:b})};
}

function MyComponent(props) {
  return <div dangerouslySetInnerHTML={createMarkup(props.a, props.b)}/>;
}

ReactDOM.render(
  <MyComponent a="banana" b="&patata"/>,
  document.getElementById('root')
)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id=root />

或者,可以尝试将jade或pug语法直接转换为react,如pug-react-compilerbabel-plugin-transform-pug-to-react。他们似乎解决了在pug模板中包含更多react组件的问题,这可能是他们可能有怪癖的一个理想的权衡。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37895635

复制
相关文章
链表----在链表中添加元素详解
1.2对于链表来说,若想访问链表中每个节点则需要把链表的头存起来,假如链表的头节点为head,指向链表中第一个节点,如图:
wfaceboss
2019/04/08
2.7K0
链表----在链表中添加元素详解
在excel图表上添加数据标签
在Excel2013中,选中柱子右键---添加数据标签-----添加数据标签(B),如下图:
演化计算与人工智能
2020/08/14
2K0
在excel图表上添加数据标签
在Ubuntu 20.04上添加swap交换空间
很多认为swap是物理RAM内存已满时才使用swap。 这是一个错误的认知,因为内核会将非活动页面将从内存移动到交换空间swap。
小锋学长生活大爆炸
2022/09/08
3.9K0
在Ubuntu 20.04上添加swap交换空间
在 Ubuntu 上如何添加 Apt 软件源
当使用 Ubuntu 软件中心或者从终端命令行输入apt或者apt-get安装软件包时,软件包被从一个或者多个软件源下载下来。一个 APT 软件源是一个网络服务器或者一个本地目录,它包含 deb 软件包和可以被 APT 工具读取的元文件。
雪梦科技
2020/05/09
23.3K0
在 Ubuntu 上如何添加 Apt 软件源
jQuery - 添加元素
jQuery append() 方法在被选元素的结尾插入内容(仍然在该元素的内部)。
陈不成i
2021/07/22
2.6K0
在元素上写事件和addEventListener()的区别[通俗易懂]
语法: element.addEventListener( type , listener , useCapture ) – – 添加事件监听 – – type: 事件类型字符串,不使用“on”前缀 – – callback:事件处理程序(回调函数) – – useCapture:可选参数,是否使用事件捕获的方式处理事件。不传递时,默认为false,表示不使用事件捕获(使用事件冒泡),如果需要显示事件捕获,则显示传递true。
全栈程序员站长
2022/09/18
1.2K0
javascript动态添加元素
<!doctype html> <html lang=”en”> <head> <meta charset=”UTF-8″> <meta name=”Generator” content=”EditPlus®”> <meta name=”Author” content=””> <meta name=”Keywords” content=””> <meta name=”Description” content=””> <title>Document</title> </head> <body> <script> function addLiElement() { var liElement = document.createElement(‘li’); //liElement.innerHTML = ‘这是新增的li元素’; var labelElement = document.createElement(‘label’); var inputElement = document.createElement(‘input’); labelElement.innerHTML = ‘单号:’ inputElement.setAttribute(‘name’, ‘expressNumber’); liElement.appendChild(labelElement); liElement.appendChild(inputElement); var ulElement = document.getElementById(‘myid’); ulElement.appendChild(liElement); } </script> <ul id=”myid”> <li>aa</li> <li>bb</li> </ul> <p> <button onClick=”addLiElement();”>动态添加标签</button> </p> </body> </html>
全栈程序员站长
2022/06/25
1.9K0
javascript 如何添加元素
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152086.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/25
1K0
原生js添加元素
今天做页面使用的mui,因为使用mui情况下无法使用jquery,于是在ajax请求完毕添加元素的时候发现自己竟然对原生js添加元素的方法有点模糊了,真是越活越倒退了,赶紧整理一波。
全栈程序员站长
2022/06/25
8.9K0
html页面添加元素
Title table,td,th{ border: 1px solid slateblue ; } div{ vertical-align: center; text-align: center; } $(function (){ var $delete=function (){ var $parent = $(this).parent().parent();
await
2021/09/23
6.4K0
js 动态添加元素
该例子的样式用的是easyui的样式,看不懂只需把class="easyui-XXX" 删除即可 <div class="fitem" id="urls" style="margin-bottom:5px;"> <label>url:</label> <input id="url" name="url" class="easyui-textbox" style="width: 260px" > 小标题: <input id="url_title" name="url_titl
黄啊码
2020/05/29
19.7K0
js 动态添加元素
vue 数组添加元素
3、splice() 方法向/从数组指定位置添加/删除项目,然后返回被删除的项目。
wust小吴
2019/11/05
5.4K0
js添加元素方法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152064.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/25
8.5K0
C语言编程: 在BMP图片上添加图片水印
gcc 版本 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)
DS小龙哥
2022/01/07
4.6K0
C语言编程: 在BMP图片上添加图片水印
js操作DOM在父元素中的结尾添加子节点注意
所以js是不能直接传入字符串的,但是jquery的append可以直接传入html字符串。
蓓蕾心晴
2018/10/25
9.9K0
js操作DOM在父元素中的结尾添加子节点注意
原生js动态添加元素
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152106.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/25
6.8K0
封装数组之添加元素
在上一小节中,我们对数组进行了一个基本的封装,该小节中,我们在上一次基础上,新增往数组添加元素的方法:
wfaceboss
2019/04/08
1.1K0
Python 列表如何添加元素
添加前: 'my', 'name', 'is', 'mark', 'age', 18
用户8418197
2022/02/13
1.8K0
点击加载更多

相似问题

Leadtools没有足够的内存

26

纱线MapReduce没有足够的内存

12

Malloc没有分配足够的内存

10

删除行没有足够的内存

111

图片图形用户界面C# (使用图片框)

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文