react:如何为REST api传入url
react: how to pass in URLs for REST APIs
开始学习反应,在网上找不到这个问题的答案。也许我不知道该用什么术语。
我的后端是django,我希望能够将REST api的url传递到我的React前端。我不想在react中硬编码它们,因为它们已经在django中定义了。
对我来说,我想在包含包含URL值的对象的html模板上呈现一个脚本标记是有意义的。
。django模板应该是这样的
<script type="text/javascript">
var CONFIG = {
some_url : '{% url "my-api" %}'
}
</script>
(对于那些不熟悉django的人,{% url %}标签呈现的url类似于/path/to/myapi)
然后在我的React Stores/Actions中,我只会引用CONFIG.some_url。
这样做对吗?或者有没有更好的方法让这些信息对我的反应组分可用。
------------编辑-----------------
使用webpack来编译jsx文件,并使用django-webpack-loader来集成所有文件。这意味着django模板会在JSX加载之前被完全渲染。
因此,模板标记不能在jsx文件中运行。
即使你正在使用django-webpack-loader(我也是),你仍然可以将props传递给你的React应用。你可以这样做:
1)解析view.py:
中的绝对后端urldef get_context_data(self, **kwargs):
context['APIROOT_URL'] = reverse('api-root', request=self.request)
return context
2)传递上下文道具给html模板
<div id="react-app"></div>
<script>
window.__APIROOT_URL__= '{{ APIROOT_URL }}';
window.react_mount = document.getElementById('react-app');
</script>
{% render_bundle 'main' %}
3)最后,在你的应用程序中,像这样获取属性:
const apirootUrl = window.__APIROOT_URL__
将其作为props传递:
<MyComponent src={% url %} />
把以下插件放到你的webpack配置中:-
plugins: [
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify(process.env.environ),
}
})
],
执行webpack命令:-
environ=local webpack
或
environ=production webpack -p //for production
创建一个常量文件,其中保存一个返回API的函数基于上述环境变量的url (local,dev,production)。
const api_url=function(){
let api_url=//production api url
if(process.env.NODE_ENV == 'local'){
//local api url
}
else if(process.env.NODE_ENV == 'development'){
//dev api url
}
return api_url;
}
export const url= api_url();
在你的componentDidMount()中导入它,使用ajax/fetch/axios调用api
import {url} from ../constants
componentDidMount(){
//api call
}
如果你同时使用django和react,我强烈建议你查看一下django-webpack-loader
- 如何更改bigquery API中的计费层选项
- Amazon S3 REST API大小不正确
- 客户端服务器REST API captcha实现
- 使用Facebook live API创建实时视频对象时的隐私设置
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- API密钥使用和检查示例
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- 谷歌地图JS API+JSON-多个标记没有显示
- 单击超链接时,如何使用Google Maps API v3缩放地图
- 如何在 API 调用后和 if 语句中启用提交按钮
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 搜索api在mac上显示对话框
- Backbone.js restful json API design
- 你怎么知道;s传入了Facebook的回调's的Javascript API
- 重写主干以传入API密钥
- Twilio API -从传入的文本消息中存储回复
- react:如何为REST api传入url