以下简单的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现在,在上面的页面中,如果您单击按钮“More.”,它会调用另一个名为Tile.js的:
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?一般来说,有什么更好的方式来编写这个应用?
发布于 2019-11-06 16:40:40
导入是缓存的,所以如果使用import jsonResponse from './data'直接返回JSON,第一个组件将导入它,而第二个组件将从导入缓存中获取它;
例如,您可以尝试导出类的实例,更改其属性之一,然后在使用该导入的另一个组件中检查该属性。
该缓存的一个现成且非常常用的示例是Reacti-样板的configureStore:它导出存储实例,因此无论导入什么组件,它都将引用同一个存储。
https://stackoverflow.com/questions/58734752
复制相似问题