Я видел, как люди достигли sh, установив фиктивный метод setState, который строго используется для запуска refre sh. Рассмотрим этот компонент:
export const Proof = () => {
console.log("Component re-rendered")
const [dummyState,rerender] = React.useState(1);
const onClick = () => {
rerender(dummyState + 1);
}
React.useEffect( () => {
console.log("dummyState's state has updated to: " + dummyState)
}, [dummyState])
return(
<div>
<button onClick={onClick}>reRender</button>
</div>
)
}
Всякий раз, когда вы хотите перерисовать компонент, вам просто нужно вызвать изменение в dummyState. Нажатие на кнопку приведет к изменению состояния компонентов, что приведет к повторному отображению компонента (я использовал console.log () для проверки). Стоит отметить, что простой вызов метода, который мгновенно изменяет состояние компонента, приведет к бесконечному l oop.
Из прочтения вашего комментария выше, звучит так, как будто вы передаете значение в качестве реквизита в дочерний компонент, и вы хотите, чтобы значение было пересчитано, как только произойдет какое-либо взаимодействие с этим компонентом. В идеале само взаимодействие должно вызывать пересчет. Но если вы просто хотите быстро пересчитать значение и перерисовать компонент сразу после его рендеринга, тогда я думаю, что это сработает:
export const Proof = () => {
console.log("Component re-rendered")
const [dummyState,rerender] = React.useState(1);
//the empty brackets will cause this useEffect
//statement to only execute once.
React.useEffect( () => {
rerender(dummyState + 1);
}, [])
return(
<div>
<p>dummyState</p>
</div>
)
}
Вы также можете пересчитать значение в методе useEffect, так как он будет вызывается, как только компонент рендерится изначально, но не при любых последующих рендерингах (из-за пустых скобок в качестве второго параметра метода useEffect)