import React from "react";
import ReactDOM from "react-dom";
class App extends React.Component {
state = {
list: [1, 2, 3, 4, 5]
};
listChange = index => {
const newList = this.state.list.slice();
newList[index] = newList[index] + 1;
this.setState({ list: newList });
};
render() {
return (
<div>
{this.state.list.map((str, index) => (
<Item
key={index}
str={str}
index={index}
changeHandle={this.listChange}
/>
))}
</div>
);
}
}
// 使用Pure提高性能
class Item extends React.PureComponent {
// class Item extends React.Component {
// 手動控制是否重繪
// shouldComponentUpdate(nextProps, nextState) {
// if (nextProps.str === this.props.str) {
// return false;
// }
// return true;
// }
itemClick = () => {
this.props.changeHandle(this.props.index);
};
render() {
console.log("i'm render! ");
return (
<div
style={{
backgroundColor: `#${this.props.str}03121`,
marginBottom: "5px"
}}
onClick={this.itemClick}
>
{this.props.str}
</div>
);
}
}
// 容器組件更新,子組件不需要重繪
// Container獨立管理狀態
// 它看到的子組件(this.props.children)是End傳給他的,不需要重新用調用React.createElement創建,所以this.props.children是不變的
class Container extends React.Component {
state = {
number: 1
};
updata = () => {
this.setState({ number: this.state.number + 1 });
};
render() {
return (
<div>
<p onClick={this.updata}>
click to updata Container! {this.state.number}
</p>
{this.props.children}
</div>
);
}
}
const End = () => {
return (
<Container>
<App />
</Container>
);
};
ReactDOM.render(<End />, document.getElementById("container"));