理论上,执行了setState()的方法更新过state,组件就会刷新。
例如: initialValues修改时,组件BaseInfoUpdata理论上应该随之刷新。
import React, { useEffect, useState, useRef, useMemo,useReducer } from 'react';
import BaseInfoUpdata from './BaseInfoUpdata';
const BaseInfoUpdataPanel = ({tid}) => {
const [initialValues, setInitialValues] = useState({});
useEffect(() => {
setInitialValues({})
}, [tid])
return (
<BaseInfoUpdata initialValues={initialValues} />
)
}
export default BaseInfoUpdataPanel;
但有时候,组件并未随之刷新。有可能我们的变量存储的是state的地址而不是值。参考(React-组件刷新问题(函数组件)_react 刷新组件_妖西的博客-CSDN博客)
解决方法有两种:
一是如参考网址中的,修改state存储的值。
可以在在useEffcet中 ,用es6方式
const initialValuesNew= {...initialValues,otherParams:'others'}
setInitialValues(initialValuesNew)
二是创建一个冗余变量refresh,来强制刷新。
const [refresh, setRefresh] = useState(false);
useEffect(() => {
refresh && setTimeout(() => setRefresh(false))
}, [refresh])
const doRefresh = () => setRefresh(true)
useEffect(() => {
setInitialValues({})
doRefresh();
}, [tid])
//...
<BaseInfoUpdata initialValues={initialValues} refresh={refresh} />