作为 React 的新手,重新渲染组件似乎是不应该做的事情。因此,例如,如果我想创建一个遵循此架构的菜单 :
App
is parent of Menu
,它具有map
创建MenuItem
组件的功能
- 菜单项来自数据源(这里是
const data
) - 当我单击 a 时
MenuItem
,它会使用所选MenuItem
值更新状态
现在很好,除了所有组件都被重新渲染(见于各种console.log
)
这是代码:
应用程序
import React, { useState} from "react"
import Menu from "./menu";
function App() {
const data = ["MenuItem1", "MenuItem2", "MenuItem3", "MenuItem4", "MenuItem5", "MenuItem6"]
const [selectedItem, setMenuItem] = useState(null)
const handleMenuItem = (menuItem) => {
setMenuItem(menuItem)
}
return (
<div className="App">
<Menu items = {data} handleMenuItem = {handleMenuItem}></Menu>
<div>{selectedItem}</div>
</div>
);
}
export default App;
菜单
import React from "react";
import MenuItem from "./menuItem";
const Menu = (props) => {
return (
<>
{props.items.map((item, index) => {
return <MenuItem key = {index} handleMenuItem = {props.handleMenuItem} value = {item}></MenuItem>
})
}
{console.log("menuItem")}
</>
)
};
export default React.memo(Menu);
菜单项
import React from "react";
const MenuItem = (props) => {
return (
<>
<div onClick={() => props.handleMenuItem(props.value)}>
<p>{props.value}</p>
</div>
{console.log("render du MenuItem")}
</>
)
};
export default React.memo(MenuItem);
如您所见,我React.memo
最后使用了,MenuItem
但它不起作用,以及PureComponent
如果有人有想法,最好有一些建议。
祝你有美好的一天