reactjs - 如何仅刷新 React 中的单个项目?
问题描述
我有这个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组件也会每次重新渲染。
这是预期的吗?如果是,请解释。
这种行为可以改变吗?
在此处查看完整的示例项目...
解决方案
您可以通过扩展来制作Hello
组件 a ,这样它就不会在每个父渲染上重新渲染PureComponent
React.PureComponent
export class Hello extends React.PureComponent {
@lazyInject("nameProvider")
private readonly nameProvider: IProvider<string>;
public render() {
return <h1>Hello {this.nameProvider.provide()}!</h1>;
}
}
推荐阅读
- cplex - 比较两个 IloNum 值时出现问题
- snowflake-cloud-data-platform - 使用 Snowflake 中的分区获取 Datediff 函数的平均值
- sql - Oracle 12c 在没有默认值的情况下向表添加列需要很长时间
- c++ - 在文件中写入时传递值:C++
- express - ExpressJS - res.status(500) 返回未定义,所以我不能调用它发送
- c# - 将字符串转换为有效的 XML
- swift - 不能将不可变值作为 [Character] 参数 swift 类型的 inout 值传递
- java - 这个括号组合的时间复杂度是多少?
- wordpress - EC2重启后AWS word press网站缺少内容
- apache - Apache重写文件夹和文件夹内的文件不同