Javascript 如何在ReactJS中更改单个组件的状态而不重新呈现整个组件?
我是ReactJS新手,我有一个问题,关于如何更改映射函数中实例化的特定组件的状态。 假设我有一个名为panels的简单组件,在我的内部有N个panel item,panel item只是一个单独的组件,在panels内部实例化了N次Map函数。大概是这样的:Javascript 如何在ReactJS中更改单个组件的状态而不重新呈现整个组件?,javascript,reactjs,redux,material-ui,Javascript,Reactjs,Redux,Material Ui,我是ReactJS新手,我有一个问题,关于如何更改映射函数中实例化的特定组件的状态。 假设我有一个名为panels的简单组件,在我的内部有N个panel item,panel item只是一个单独的组件,在panels内部实例化了N次Map函数。大概是这样的: class Panels extends React.Component { constructor(props) { super(); this.state = { panelItems: [
class Panels extends React.Component {
constructor(props) {
super();
this.state = {
panelItems: [
{ id: '1', text: 'A' },
{ id: '2', text: 'B' },
{ id: '3', text: 'C' },
]
};
}
render() {
return (
<div>
{this.state.panelItems.map(item => (
<PanelItems key={item.id}>{item.text}</PanelItems>
))}
</div>
)
}
}
export default Panels;
类面板扩展了React.Component{
建造师(道具){
超级();
此.state={
小组项目:[
{id:'1',text:'A'},
{id:'2',text:'B'},
{id:'3',text:'C'},
]
};
}
render(){
返回(
{this.state.panelItems.map(项=>(
{item.text}
))}
)
}
}
导出默认面板;
现在我有一些问题:
const updateText = (index, text) => {
// get the existing panel items from state.
// we don't want to mutate the original so we make a copy using spread syntax
const panelItems = [...this.state.panelItems];
panelItems.splice(
index, // starting at item "index"
1, // delete one item from the array
{ ...panelItems[index], text } // and insert its replacement
);
this.setState({ panelItems }); // set state with the new array
}
然后单击按钮调用该函数:
<button onClick={() => updateText(0, 'the new text')}>Update Item 0</Button>
只要项目道具是同一个对象,它就不应该重新渲染,即使父状态发生更改
{this.state.panelItems.map(item => (
<Items key={item.id} item={item} />
))}
const Item => ({item}) => <PanelItem>{item.text}</PanelItem>