【问题标题】:Exporting / Importing a Const from a React Component从 React 组件导出/导入常量
【发布时间】:2022-01-14 18:49:42
【问题描述】:

我已经阅读了几个 Stack Overflow 问题和文章,试图找到一个我正在尝试做的简单示例,但一切似乎都过于复杂。我只想能够导出我在一个 React 组件的函数中创建的 const,然后导入以供另一个 React 组件使用。例如:

包含我要导出的constFirstArticle的组件:

function Articles() {
  const FirstArticle = document.querySelector('.article');
  console.log(FirstArticle) // <div class="article">Article 1</div>

  return (
    <div>
      <div class="article">Article 1</div>
      <div class="article">Article 2</div>
      <div class="article">Article 3</div>
    </div>
  )
}

export default Articles;

我要将const FirstArticle导入到的组件:

import Articles, { FirstArticle } from "./Articles";

function Preview() {
  return (
    <div>
      {FirstArticle} // Would expect to see: <div class="article">Article 1</div>
    </div>
  )
}

export default Preview;

我尝试了一些不同的方法 - 将 const FirstArticle 移动到 Articles 函数之外以使其更加“全局”,将 const 放在单独的函数中并导出/导入该函数(有效但它导入另一个组件上的整个函数,我不知道如何只解析出FirstArticle const),并将export default 行中的const 与函数一起导出(不起作用)。

我读到我可能需要使用useState。由于我是 React 新手,所以我对此不太熟悉。 useState 是我需要研究的解决方案吗?

【问题讨论】:

  • 你可以在这里使用useRef钩子。 Rest 可以告诉您是否可以制作一个可以显示完整代码的沙箱。如果您愿意,可以使用 codesandbox.io 。这将更容易理解究竟是什么问题。
  • 我绝对需要更多关于 useRef 的研究。似乎大多数文章都是这么说的,但我希望有一种简单的方法可以做到这一点而无需钩子。

标签: javascript reactjs react-hooks constants export


【解决方案1】:

为什么不对不同的组件使用不同的文件呢?比如:

// useArticles.js
export function useArticles() {
  return [...something]; // the array of articles
}
// Article.js
export function Article(props) {
  const {article} = props;
  return <div class="article">
    {/* ...here you render a single article */}
  </div>;
}
// Articles.js
import { Article } from './Article';
import {useArticles} from './useArticles';
export function Articles() {
  const articles = useArticles();
  return <div>
    {articles.map(article => <Article key={article.id} article={article} />)}
  </div>;
}
// Preview.js
import {Article} from './Article';
import {useArticles} from './useArticles';
function Preview() {
  const articles = useArticles();
  const firstArticle = articles[0];
  return (
    <div>
      <Article article={firstArticle} />
    </div>
  )
}

export default Preview;

顺便说一句,如果您是 react 新手并且不知道 useState,我建议您在继续之前学习 react 钩子(尤其是 useStateuseEffect)。

此外,在 react 中,您应该始终先考虑数据,然后再考虑如何渲染它们,最好尽可能避免从渲染组件获取数据。

【讨论】:

  • 我明白你在说什么。对于我的特定用例,这些“文章”实际上是动态的。也就是每次添加一个新的文章 div 时,我都会添加到文章列表的顶部。所以今天的“FirstArticle”可能与明天的“FirstArticle”不一样。这就是为什么我想从所有文章所在的“文章”组件中提取第一篇文章,而不是使用单独的组件,如果这有意义的话。不过,似乎我真的只需要深入研究这些钩子。谢谢你的建议!
  • 好的,我想文章是来自 API 的数组,对吧?
  • 没有 API,只有我自己的内容。每篇“文章”都是我写的博客的预览,所以“文章”是一个 div,包含标题、图片和总结博客的短句。但是,是的,我可以作为数组访问,因此我尝试导出的 const 可以是整个数组(导入另一个组件,然后只针对要显示的第一个数组对象),或者我可以分离出第一篇文章首先从数组到它自己的 const,然后将其导出,因为这是我真正需要在其他组件上使用的唯一部分。
  • 好的,我要更新我的答案了。
  • 您的新编辑看起来现在对我有用。这是避免使用我不熟悉的钩子的巧妙解决方法。让我尝试应用到我的代码。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2019-12-22
相关资源
最近更新 更多