React Hooks如何主動(dòng)更新Hooks組件
React Hooks主動(dòng)更新Hooks組件
當(dāng)我們用useState創(chuàng)建對(duì)象數(shù)組的時(shí)候,使用數(shù)組的index去改變數(shù)組某一項(xiàng)中的對(duì)象屬性時(shí),useState無(wú)法監(jiān)聽到,此時(shí)視圖就無(wú)法更新,所以我們就需要主動(dòng)強(qiáng)制更新視圖
const [friendCircleArr, setFriendCircleArr] = useState({
name: 'Lucy',
avator: P1,
content: {
text: '今天上課好累啊',
image: null
},
time: '剛剛',
isLike: false
}, {
name: 'Helena',
avator: P2,
content: {
text: '杰倫太帥了吧??!',
image: [Zhou1, Zhou2, Zhou3]
},
time: '1分鐘前',
isLike: false
})此時(shí)我們?nèi)バ薷拇藢?duì)象數(shù)組
const likeClick = index => {
const tempArr = friendCircleArr
tempArr[index].isLike = !tempArr[index].isLike
setFriendCircleArr(tempArr)
}我們會(huì)發(fā)現(xiàn)視圖并沒有發(fā)生更新
此時(shí)我們就需要主動(dòng)更新視圖
const [refresh, setRefresh] = useState(false)
useEffect(() => {
refresh && setRefresh(false)
}, [refresh])
// 修改之前的代碼
const likeClick = index => {
const tempArr = friendCircleArr
tempArr[index].isLike = !tempArr[index].isLike
setFriendCircleArr(tempArr)
setRefresh(true)
}創(chuàng)建一個(gè)refresh變量,用來(lái)控制視圖更新,此時(shí)再調(diào)用likeClick方法,視圖就可以正常更新了
react hooks更新、刷新子組件
import React, { Fragment, useEffect, useState, } from 'react';
import {
Tabs,
Button,
} from 'antd';
import { connect, history } from 'umi';
import Cmp1 from './components/cmp1';
import Cmp2 from './components/cmp2';
import Cmp3 from './components/cmp3';
import Cmp4 from './components/cmp4';
import Cmp5 from './components/cmp5';
import Cmp6 from './components/cmp6';
const { TabPane } = Tabs;
const DemoPage = () => {
const [refresh, setRefresh] = useState(false);
useEffect(() => {
refresh && setTimeout(() => setRefresh(false));
}, [refresh]);
// tab切換
const handleTabChange = (key) => {
setCurrentKey(key);
};
//刷新,重新加載組件
const handleReload = () => {
setRefresh(true);
};
return (
<Fragment>
<div>
<Button onClick={handleReload}>刷新</Button>
<div>
<Tabs activeKey={currentKey} onChange={handleTabChange}>
<TabPane tab="1" key="1"></TabPane>
<TabPane tab="2" key="2"></TabPane>
<TabPane tab="3" key="3"></TabPane>
<TabPane tab="4" key="4"></TabPane>
<TabPane tab="5" key="5"></TabPane>
<TabPane tab="6" key="6"></TabPane>
</Tabs>
{currentKey === '1' && !refresh && (
<Cmp1/>
)}
{currentKey === '2' && !refresh && (
<Cmp2/>
)}
{currentKey === '3' && !refresh && (
<Cmp3/>
)}
{currentKey === '4' && !refresh && (
<Cmp4/>
)}
{currentKey === '5' && !refresh && (
<Cmp5/>
)}
{currentKey === '6' && !refresh && (
<Cmp6/>
)}
</div>
</div>
</Fragment>
);
};
export default connect()(DemoPage);
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
React實(shí)時(shí)預(yù)覽react-live源碼解析
這篇文章主要為大家介紹了React實(shí)時(shí)預(yù)覽react-live源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
如何使用Redux Toolkit簡(jiǎn)化Redux
這篇文章主要介紹了如何使用Redux Toolkit簡(jiǎn)化Redux,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下2021-04-04

