首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React只导入JSON对象一次

React只导入JSON对象一次
EN

Stack Overflow用户
提问于 2019-11-06 16:35:36
回答 1查看 187关注 0票数 2

以下简单的React组件将JSON文件(data.js)导入为对象,并列出其中的项。

List.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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?一般来说,有什么更好的方式来编写这个应用?

EN

回答 1

Stack Overflow用户

发布于 2019-11-06 16:40:40

导入是缓存的,所以如果使用import jsonResponse from './data'直接返回JSON,第一个组件将导入它,而第二个组件将从导入缓存中获取它;

例如,您可以尝试导出类的实例,更改其属性之一,然后在使用该导入的另一个组件中检查该属性。

该缓存的一个现成且非常常用的示例是Reacti-样板的configureStore:它导出存储实例,因此无论导入什么组件,它都将引用同一个存储。

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

https://stackoverflow.com/questions/58734752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档