reactjs - React - 只导入一次 JSON 对象
问题描述
以下简单的 React 组件将 JSON 文件 ( data.js ) 作为对象导入并列出其中的项目。
List.js
import React from 'react'
import jsonResponse from './data'
function ZooList ({ setID }) {
const setURL = (e) => {
window.history.pushState(null, null, '/' + e)
setID(e)
}
const list = jsonResponse.animals.map((item) => {
return (
<li key={item.id}>
<div>
<img
src={item.image_url}
alt={item.name}
onClick={() => setID(item.id)}
/>
<h3>{item.name}</h3>
<p>
<b>Distribution</b>: {item.distribution}
</p>
<button onClick={() => setURL(item.id)}>More...</button>
</div>
</li>
)
})
return (
<ul>
{list}
</ul>
)
}
export default List
现在在上面的页面中,如果您单击“更多...”按钮,它会调用另一个名为 Tile.js 的 React 组件作为休闲组件:
Tile.js
import React from 'react'
import jsonResponse from './data'
function Tile ({ setID, newID }) {
const clearURL = (e) => {
window.history.pushState(null, null, '/')
setID(null)
}
return (
<div>
<div>
<img
src={jsonResponse.animals[newID].image_url}
alt={jsonResponse.animals[newID].name}
/>
<h2>{jsonResponse.animals[newID].name}</h2>
<p><b>Distribution</b>: {jsonResponse.animals[newID].distribution}</p>
<StyledParagraph>{jsonResponse.animals[newID].details.long}</StyledParagraph>
<button onClick={() => clearURL(null)}>Back to overview</button>
</div>
</div>
)
}
export default Tile
问题是第二个组件也在导入 JSON 文件(data.js)。如何避免两次导入data.js?通常,编写此应用程序的更好方法是什么?
解决方案
导入是缓存的,所以如果你直接返回一个 JSON import jsonResponse from './data'
,第一个组件将导入它,而第二个将从导入缓存中获取它;
例如,您可以尝试导出一个类的实例,更改它的一个属性,然后在另一个使用该导入的组件中检查该属性。
该缓存的一个易于选择且非常常见的使用示例是react-boilerplate的configureStore :它导出存储实例,因此无论导入哪个组件,它将引用同一个存储。
推荐阅读
- gnuplot - 如何将x轴格式化为更小的比例?
- flask - 为什么我的 Flask 应用程序在测试中返回状态码为 308 的响应?
- python-3.x - 有没有办法在输入“id”加载之前防止回调?
- javafx - 与窗格边框重叠的窗格子项
- asp.net-core - 将 AspNetUsers Id 列的数据类型更改为 int 时,无法解析类型“Microsoft.AspNetCore.Identity.RoleManager”的服务
- database - Mongoose:如何同时基于模型字段和关联的模型字段进行过滤?
- telosys - 我可以在不安装 Eclipse 的情况下使用 Telosys 向导吗?
- amazon-web-services - logdna 仅通过弹性 beanstalk logdna 代理从特定路由流式传输日志
- javascript - 基本运费计算器
- python - 从 web html 循环遍历 pandas 数据框