当前位置: 首页 > 知识库问答 >
问题:

是否有任何方法可以使React组件仍然保留来自上一次渲染的值?[副本]

梁研
2023-03-14

我有一个父组件,它多次呈现一个子组件。此子组件用于许多不同的组件。我需要在这个子组件中有一个数组,它保留该组件的所有先前呈现,然后访问传递给它的最大文本。

import TextComponent from '../../text'
const ParentComponent = ()=>{
  // ... some code here and get some data from API
 const text = getTextFromAPI()
  return (
   <>
    <ARandomComponent/>
    <AnotherRandomComponent/>
    <TextComponent text={text}/>
  </>)
}

TextComponent中,我需要知道每个元素接收到的文本,并返回最大的文本。我想也许我可以在TextComponent中有一个数组,但当然,每个渲染组件都有新的数据,我知道这是设计的。

有没有办法激活这个?要在TextComponent存储一个值,则来自不同位置的其他渲染仍然可以访问该值

共有3个答案

莫泓
2023-03-14

编辑:您在注释中阐明了多个组件使用“全局”值的要求。这是使用内置上下文API或状态管理库(如反冲或效应器)的情况。

您可以使用这样的钩子来存储在使用它的组件的使用寿命期间看到的最长字符串:

function useLongestString (text = '') {
  const [str, setStr] = useState(text);
  if (text.length > str.length) setStr(text);
  return str;
}

演示:

<div id="root"></div><script src="https://unpkg.com/react@17.0.2/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone@7.16.4/babel.min.js"></script>
<script type="text/babel" data-type="module" data-presets="react">

const {useState} = React;

function useLongestString (text = '') {
  const [str, setStr] = useState(text);
  if (text.length > str.length) setStr(text);
  return str;
}

function DisplayLongestString (props) {
  const longest = useLongestString(props.text);
  return <div>{longest}</div>;
}

function Example (): ReactElement {
  const [value, setValue] = useState('Keep typing');
  return (
    <div>
      <h2>Longest string:</h2>
      <DisplayLongestString text={value} />
      <input
        onChange={ev => setValue(ev.target.value)}
        placeholder="Type a longer string"
        value={value}
      />
    </div>
  );
}

ReactDOM.render(<Example />, document.getElementById('root'));

</script>
齐锐进
2023-03-14

您需要使用像redux这样的状态管理工具,这使得您的状态在应用程序范围内可用。获取数据并将数组存储在还原状态。然后它可以从整个应用程序的任何组件访问。

邵博艺
2023-03-14

如果您的ParentComponent未重新渲染。您可以使用useState,条件是调用设置状态时,实际状态小于将要接收的新文本。

 类似资料:
  • 我有一个应用程序组件和测试组件 应用程序组件 测试组件:

  • 问题内容: 我有一个组件,该组件获取作为道具的项目集合,并将其作为呈现为父组件子项的组件集合。我们使用以字节数组形式存储的图像。在函数中,我从项目中获取图像ID,并异步调用,以获取图像的字节数组。我的问题是我不能将诺言传播到React中,因为它不是设计来处理渲染中的诺言的(无论如何我还是不能说的)。我来自背景,所以我猜我在寻找类似关键字的内容来重新同步分支代码。 该函数看起来像这样(简化): 该方

  • 我有一个问题,我正在尝试将值设置为一个状态(选定的Pathway),关于通过 redux 设置的另一个常量(国家标签)。 设置“selectedPatway”后,我想在<code>中显示结果 一切都很好,但是当我刷新页面时,我在浏览器中得到一个“渲染的钩子比之前渲染的钩子多”。这是代码: 我浏览了整个互联网,我认为我已经正确地应用了所有东西(显然不是因为它不工作…)。 不有条件地调用钩子 在顶层使

  • 问题内容: 我创建了一个简单的React组件,其中显示了另一个React组件。但是它不会在浏览器中呈现: 我期望出现在屏幕上,但是什么也没有出现,当我检查元素时,我只能看到 请问任何一点我们可能有什么问题。 问题答案: JSX希望组件标签大写。否则,它将仅使用提供的标签创建一个DOM元素。参见HTML标签与React组件。 编译为同时编译成。 只要重命名为,您就很好。

  • 问题内容: “有效的Go”文档说明以下内容。 关于指针与接收器的值的规则是,可以在指针和值上调用值方法,但是只能在指针上调用指针方法。 http://tip.golang.org/doc/effective_go.html#pointers_vs_values 这样,如果我定义如下所示的方法,那么使用值不能调用它吗? 但是,以下似乎仍然有效。 为什么? 是否将值转换回调用的地址/指针? 如何确保某

  • 问题内容: 我有一个要显示字符串数组的组件。代码看起来像这样。 运行正常。例如,如果 props.data = [‘tom’,’jason’,’chris’] 页面中呈现的结果将为 tomjasonchris 然后,我想使用逗号连接所有名称,因此我将代码更改为 但是,渲染的结果是 [Object],[Object],[Object]。 我不知道如何解释对象成为要渲染的反应组件。有什么建议吗? 问题