React Hooks如何主動更新Hooks組件
React Hooks主動更新Hooks組件
當(dāng)我們用useState創(chuàng)建對象數(shù)組的時候,使用數(shù)組的index去改變數(shù)組某一項(xiàng)中的對象屬性時,useState無法監(jiān)聽到,此時視圖就無法更新,所以我們就需要主動強(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 })
此時我們?nèi)バ薷拇藢ο髷?shù)組
const likeClick = index => { const tempArr = friendCircleArr tempArr[index].isLike = !tempArr[index].isLike setFriendCircleArr(tempArr) }
我們會發(fā)現(xiàn)視圖并沒有發(fā)生更新
此時我們就需要主動更新視圖
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)建一個refresh變量,用來控制視圖更新,此時再調(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é)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
React 項(xiàng)目中動態(tài)設(shè)置環(huán)境變量
本文主要介紹了React 項(xiàng)目中動態(tài)設(shè)置環(huán)境變量,本文將介紹兩種常用的方法,使用 dotenv 庫和通過命令行參數(shù)傳遞環(huán)境變量,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04ReactQuery系列之?dāng)?shù)據(jù)轉(zhuǎn)換示例詳解
這篇文章主要為大家介紹了ReactQuery系列之?dāng)?shù)據(jù)轉(zhuǎn)換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11解決React報錯`value` prop on `input` should&
這篇文章主要為大家介紹了React報錯`value` prop on `input` should not be null解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12React Hook 監(jiān)聽localStorage更新問題
這篇文章主要介紹了React Hook 監(jiān)聽localStorage更新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10