透過一個組件將將其他組件包起來,管理padding及margin或是透過該組件傳遞資料
可以在父組件使用{props.children}傳遞這些被父組件包起來的資料
// 接收子組件資料
// BaseContainer.jsx
const BaseContainer = () => {
return (
<div>
{props.children}
</div>
)
}
//
const test = () => {
return(
<BaseContainer>
<div>我是DOM元素</div>
<div>我是DOM元素</div>
<div>我是DOM元素</div>
</BaseContainer>
)
}
利用改動資料來更新畫面達到效果,使用框架要減少操作DOM的機率
使用 .map return一筆Array資料
// json
import faqList from './faqList.js'
faqList.map((item, index) =>
<div className="active">
<h2>{item.title}</h2>
<p>{item.list}</p>
</div>
)
在原本資料(Array)新增一筆值(object新增)紀錄class開關屬性
// 新增一個isOpen屬性作為判斷值
const orgTitleList = faqList.data.map(item => (
{...item, isOpen: false}
))
資料更新時須使用useState()來渲染更新的畫面
// 將剛剛更新的變數,放入useState作為初始值
const [titleList, setTitleList] = useState(orgTitleList)
// 資料渲染改為useState的titleList
titleList.map( (item, index) => <div onClick={() => slideToggle (index)}>....</div> )
寫入點擊邏輯, 用setTitleList更新資料,渲染畫面
const slideToggle = (currentIndex) => {
// 點擊自身以外的須關閉
titleList.map((item,index) => {
if(index !== currentIndex) {
titleList[index].isOpen = false
}
})
// 點自己開合
titleList[currentIndex].isOpen = !titleList[currentIndex].isOpen
setTitleList([...titleList])
}
import React, {useEffect, useCallback} from 'react'
const testComponent = () => {
const testFunction = useCallback(() => {
},[])
useEffect(() => {
testFunction ()
}, [testFunction ])
}