reactjs - 强制 react 功能组件触发重新渲染

我正在尝试让一个功能组件在 testFn 执行时强制重新渲染。我想使用状态来做到这一点(如果有更好的方法请说出来),这似乎成功地强制重新渲染但只有两次,然后什么都没有。

我构建了一个简单的演示来模拟这个问题,因为使用我的真实应用程序太难演示了,但同样的原则应该适用(我的真实演示在函数执行时获取数据并将其显示在页面上,但它不会重新呈现而且我必须刷新页面才能看到新数据,因此我想触发重新呈现)。

import React, { useState } from "react";

const App = () => {
  const [, rerender] = useState(false);

  const testFn = () => {
    console.log("test Fn");
    rerender(true);
  };

  return (
    <div>
      <p>test</p>
      <button onClick={testFn}>clickk</button>
      {console.log("render")}
    </div>
  );
};

export default App;

我还制作了一个 Stackblitz为了方便演示。

谁能解决这个演示或想出更好的实现方法?

在此感谢您的帮助。

最佳答案

当状态改变时,它会触发重新渲染。

第一次单击按钮时,状态从 false 更改为 true,因此会触发重新渲染。

随后的点击将它从 true 更改为 true 这不是更改,所以它没有。

你可以切换它:

const [render, rerender] = useState(false);

rerender(!render);

所以它实际上发生了变化。

…但这听起来像是一个 XY 问题,您可能应该更改实际正在渲染的内容。

https://stackoverflow.com/questions/66014437/

相关文章:

c# - 如何使用 C# 连接到 Azure 存储表

java - 如果有 happens-before 保证,让 "this"在构造函数的最后一个语句中

c++ - 为什么 std::ranges::view_interface 使用 CRTP

swift - SwiftLint 的开关大小写格式问题

c++ - 具有覆盖的嵌套类如何工作?

flutter - 具有动态高度的动画容器 Flutter

c - 程序输出说明

powershell - 如何在 Powershell 中对 3000 万条 csv 记录进行排序

python - 将 seq2seq NLP 模型转换为 ONNX 格式会对其性能产生负面影响吗?

list - 从列表中获取元素 Terraform