【发布时间】:2018-12-27 09:06:16
【问题描述】:
我有这个 App React 组件(TypeScript):
class App extends React.Component {
public state = {
text: ''
}
constructor(props: any) {
super(props);
this.state = { text: 'something' };
}
public handleClick = () => {
const date = `new ! : ${new Date().toString()}`;
// tslint:disable-next-line:no-console
console.log('click ! : ' + date);
this.setState({
text: date
});
};
public render() {
return (
<div className="App">
<button onClick={this.handleClick}>Button</button>
<p>{this.state.text}</p>
<Hello />
</div>
);
}
}
还有这个 Hello 组件:
export class Hello extends React.Component {
@lazyInject("nameProvider")
private readonly nameProvider: IProvider<string>;
public render() {
return <h1>Hello {this.nameProvider.provide()}!</h1>;
}
}
nameProvider 是一个简单的提供者,它基于随机数返回一个字符串。
单击按钮时,日期会更新,但每次都会重新渲染 Hello 组件。
这是预期的吗?如果是,请解释。
这种行为可以改变吗?
查看完整示例项目here...
【问题讨论】:
-
如果我知道我的反应(我可能不太清楚),那么过程将是:App 中的状态更改 > 在 App 中渲染,它将重新渲染所有内容,然后计算两者之间的差异内部 DOM 和实际 DOM 内容并更新
标签: reactjs refresh render setstate