当前位置: 首页 > 面试题库 >

带有Django的ReactJS-实际用法

阴培
2023-03-14
问题内容

我对React有点困惑,我很喜欢它。它比Angular更为冗长(带有|过滤器的ng-repeat是无价的),但是还可以。

让我烦恼的是,我应该如何将React与Django模板一起使用。我应该将所有JavaScript连同“ HTML”标记一起放入模板中。

实施Angular非常无缝。我只是将一些属性放入template /
django表单类中,然后在单独的文件中编写了javascript。包括该文件,就完成了。

如何对“使用”做出反应?正确的方法是什么?

提前致谢!


问题答案:

由于您想将React与Django模板一起使用,因此我假设React代码只会影响页面的特定部分。 基于该假设编写以下说明。

首先,您不必将所有JS代码都放在模板中-实际上,那是一团糟。

您可以使用Webpack创建一个单独的基于JS的构建过程(请参阅此方法)。这增强了客户端代码的功能,允许您在浏览器中使用CommonJS模块,您可以直接从npm中提取该模块,包括React。

Webpack将依次生成一个包(或多个包,具体取决于应用程序的性质和Webpack配置),您需要<script>像往常一样通过标签将其包含在Django模板中。

现在,您需要进行React.render()调用以在现有页面布局中的某个位置呈现React应用程序。您需要使用具有特定ID
/类名称的空HTML元素作为应用程序的安装点。

但需要注意的是:您不能直接从浏览器或Django模板访问CommonJS模块。所以你

  • React您的应用暴露给该window对象,或者
  • 用粘合代码创建一个模块来处理应用程序初始化并将该方法公开给window对象。

在任何情况下,您都需要直接从模板中调用初始化代码(请查看粘合代码示例,以及对应用程序初始化的调用)。

此初始化步骤还允许您将Django模板中可用的变量传递给JS代码。

最终的Django模板将如下所示:

{% load staticfiles %}
{% extends 'base.html' %}

{% block scripts %}
<script type="text/javascript" src="{% static 'path/to/app.bundle.js' %}"></script>
<script type="text/javascript">
  // Initialization glue code
  window.MyApp.init({el: '.app-mountpoint'});
</script>
{% endblock %}

{% block content %}
<!-- Your template contents -->

<!-- The mount point of your app -->
<div class="app-mountpoint" />
{% endblock %}

和胶水代码:

var React = require('react');

var MyAppComponent = require('MyAppComponent');


window.MyApp = {

  init: function (opts) {
    var mountPoint = document.querySelector(opts.el);

    React.render(<MyAppComponent />, mountPoint);
  }

};

我知道所有这些可能在一开始就让人感到不知所措(与您使用Angular的几个步骤相比,这甚至更多),但相信我从长远来看会有所收获。

总结一下:

  1. 在单独的JS文件中编写React代码
  2. 使用Webpack(利用CommonJS模块)捆绑您的React代码
  3. 将捆绑包包含在Django模板中
  4. 使用Django模板中的粘合代码渲染React代码


 类似资料:
  • 问题内容: 抱歉,这似乎是一个愚蠢的问题,但我在此问题上花费了很多时间,无法找到理想的解决方法。 我有使用Django模板呈现的Django表单。现在,我想将React组件添加到表单字段之一(从长远来看,可能要添加到多个字段)。 根据我到目前为止所读的内容,最好不要将Django模板与React渲染混合使用,而让Django仅用作将JSON数据发送到React的后端API,而React则负责整个表

  • 以下是我的想法: 有一个Django网站,可以接收/发送JSON信息,这样我就可以为Webbrowser或Unity/UE客户端创建一个JavaScript客户端 我只想为Unity/UE客户端提供一个新功能:实时聊天 我想在特定端口上使用tornado服务器,比如说。 以下是我到目前为止所做的: 在Django网站上验证 让Django网站上的一切工作 现在我想让客户端连接到端口(纯TCP)并发

  • 问题内容: 这是一个教育项目,不用于生产。我本来不想让用户登录。 我可以在没有用户登录的情况下使用CSRF令牌对Django进行POST调用吗?我可以不使用jQuery来做到这一点吗?我在这里不了解我的观点,并且肯定会混淆一些概念。 在JavaScript方面,我找到了这个redux-csrf软件包。我不确定如何将其与POST使用Axios的操作结合使用: 在Django方面,我已经阅读了有关CS

  • 问题内容: 我使用routeProvider为我的URL定义控件和模板。 当我单击具有与实际位置相同的URL的链接时,没有任何反应。我希望如果用户单击这样的链接就可以调用该方法,即使位置没有更改。换句话说,如果将位置设置为相同的值,则我希望它的行为与将其设置为不同的值时相同。 有没有一种方法可以配置routeProvider或locationProvider使其自动执行?或正确的做法是什么?这是往

  • 我如何使用REST api连接Wordpress网站(并获取帖子)?我做了什么: 在Wordpress上安装了REST插件(https://wordpress.org/plugins/json-rest-api/) 启用它 但是我收不到邮件。只有当我使用CURL时(但是我想使用请求) 使用CURL(CURL-I http://www.uaigeek.com.br/blog/wp-json/post

  • 问题内容: 更新的问题 我的虚拟主机 问题答案: 这是问题的最可能原因。您已经在超级用户的主文件夹中创建了virtualenv。但是该文件夹不太可能被Apache访问。默认情况下,其他任何用户都无法访问用户的主文件夹。 Web服务器和WSGI过程将运行作为一个非特权用户通常命名为,,或者类似的东西。虽然您可以通过更改/ root /上的权限来解决此问题,但这不是很大。如果是普通用户,则危险性会降低