在class组件中强制更新
默认情况下,当组件的 state 或 props 发生变化时,组件将重新渲染。如果 render() 方法依赖于其他数据,则可以调用 forceUpdate() 强制让组件重新渲染。
调用 forceUpdate() 将致使组件调用 render() 方法,此操作会跳过该组件shouldComponentUpdate()。但其子组件会触发正常的生命周期方法,包括 shouldComponentUpdate() 方法。
import React, { component } from "react"
// ...
component.forceUpdate(callback)
https://zh-hans.reactjs.org/docs/react-component.html#forceupdate
在hooks组件中
如果前后两次的值相同,useState 和 useReducer Hook 都会放弃更新。原地修改 state 并调用 setState 不会引起重新渲染。
通常,你不应该在 React 中修改本地 state。然而,作为一条出路,你可以用一个增长的计数器来在 state 没变的时候依然强制一次重新渲染:
import { useReducer } from "react";
import "./App.css";
function App() {
const [, forceUpdate] = useReducer((x) => x + 1, 0);
function handleClick() {
forceUpdate();
}
console.log("render");
return (
<div className="App">
<button onClick={handleClick}>forceUpdate</button>
</div>
);
}
export default App;
https://zh-hans.reactjs.org/docs/hooks-faq.html#is-there-something-like-forceupdate