React+Hooks组件刷新

理论上,执行了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} />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值