我有一个函数组件,我想强制它重新渲染。
我该怎么做? 由于没有实例this,我无法调用this.forceUpdate()。
this
this.forceUpdate()
使用反应钩子,您现在可以调用useState()您的函数组件。
useState()
useState()将返回一个包含两件事的数组:
通过它的设置器更新值将强制你的函数组件重新渲染 , 就像这样forceUpdate做:
forceUpdate
import React, { useState } from 'react'; //create your forceUpdate hook function useForceUpdate(){ const [value, setValue] = useState(0); // integer state return () => setValue(value => value + 1); // update state to force render // An function that increment 馃憜馃徎 the previous state like here // is better than directly setting `value + 1` } function MyComponent() { // call your hook here const forceUpdate = useForceUpdate(); return ( <div> {/*Clicking on the button will force to re-render like force update does */} <button onClick={forceUpdate}> Click to re-render </button> </div> ); }
你可以在这里找到一个演示。
上面的组件使用了一个自定义的钩子函数 ( useForceUpdate),它使用了反应状态钩子useState。它增加组件的状态值,从而告诉 React 重新渲染组件。
useForceUpdate
useState
在此答案的旧版本中,该片段使用了一个布尔值,并将其切换为forceUpdate(). 现在我已经编辑了我的答案,该片段使用数字而不是布尔值。
forceUpdate()
为什么 ? (你会问我)
因为一旦发生在我身上,我forceUpdate()随后从 2 个不同的事件中被调用了两次,因此它将布尔值重置为其原始状态,并且组件从未呈现。
这是因为在useState‘s setter ( setValuehere) 中,React将先前的状态与新的状态进行比较, 仅当状态不同时才渲染。
setValue
React