小编典典

React - 如何强制功能组件呈现?

all

我有一个函数组件,我想强制它重新渲染。

我该怎么做?
由于没有实例this,我无法调用this.forceUpdate()


阅读 91

收藏
2022-07-16

共1个答案

小编典典

馃帀 现在可以了,使用React hooks

使用反应钩子,您现在可以调用useState()您的函数组件。

useState()将返回一个包含两件事的数组:

  1. 一个值,表示当前状态。
  2. 它的二传手。使用它来更新值。

通过它的设置器更新值将强制你的函数组件重新渲染
就像这样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 重新渲染组件。

编辑

在此答案的旧版本中,该片段使用了一个布尔值,并将其切换为forceUpdate(). 现在我已经编辑了我的答案,该片段使用数字而不是布尔值。

为什么 ? (你会问我)

因为一旦发生在我身上,我forceUpdate()随后从 2 个不同的事件中被调用了两次,因此它将布尔值重置为其原始状态,并且组件从未呈现。

这是因为在useState‘s setter ( setValuehere) 中,React将先前的状态与新的状态进行比较,
仅当状态不同时才渲染。

2022-07-16