React Rerender 组件不起作用,无法读取未定义的属性“forceUpdate”[重复]

Posted

技术标签:

【中文标题】React Rerender 组件不起作用,无法读取未定义的属性“forceUpdate”[重复]【英文标题】:React Rerender component not working, Cannot read property 'forceUpdate' of undefined [duplicate] 【发布时间】:2021-09-24 18:37:36 【问题描述】:

如何让 forceUpdate() 重新渲染组件?我收到以下错误,无法读取未定义的属性“forceUpdate”

function App() 

  const renderData = () => 
    console.log('render');
    this.forceUpdate();
  

  return (
    <div>
      Test
      <button onClick=renderData> render data </button>
    </div>
  );

错误:

TypeError: 无法读取未定义的属性“forceUpdate”

const renderData = () => 
console.log('render');
this.forceUpdate();

资源:Can you force a React component to rerender without calling setState?

【问题讨论】:

【参考方案1】:

this.forceUpdate() 仅适用于class based components

您可以通过更新状态来强制更新:

const [someVar, setSomeVar] = useState(null);

const renderData = () => 
    console.log('render');
    setSomeVar(true);


或者从here 中汲取灵感,创建自己的 forceUpdate 函数:

function useForceUpdate()
    const [value, setValue] = useState(0); // integer state
    return () => setValue(value => value + 1); // update the state to force render

我强烈建议不要这样做,这表明您可能应该以不同的方式构建您的逻辑。

【讨论】:

以上是关于React Rerender 组件不起作用,无法读取未定义的属性“forceUpdate”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Redux 中的 React ReRender

A4J reRender 在 IE9 上不起作用 [在 IE8 上工作]

react中的setState在react组件中不起作用

为啥 React 路由在组件中不起作用?

event.preventDefault() 在 React 中不起作用

在 React 样式组件上使用 'ref' 不起作用