Javascript 如果道具和状态没有';不变
当React组件的状态或属性保持不变时,它将进行渲染。我不明白为什么它会重新加载/更新,因为结果不会改变Javascript 如果道具和状态没有';不变,javascript,reactjs,rendering,Javascript,Reactjs,Rendering,当React组件的状态或属性保持不变时,它将进行渲染。我不明白为什么它会重新加载/更新,因为结果不会改变 class A extends Component { render() { console.log("Hello") return "Foo"; } } class App extends Component { constructor(props) { super(props); this.state = { a: "ASDA" }; }
class A extends Component {
render() {
console.log("Hello")
return "Foo";
}
}
class App extends Component {
constructor(props) {
super(props);
this.state = { a: "ASDA" };
}
render() {
return (
<div>
<button onClick={()=>this.setState({a: Math.random()}) }>asdsa</button>
<div>{this.state.a}</div>
<A />
</div>
);
}
A类扩展组件{
render(){
log(“你好”)
返回“Foo”;
}
}
类应用程序扩展组件{
建造师(道具){
超级(道具);
this.state={a:“ASDA”};
}
render(){
返回(
this.setState({a:Math.random()}}>asdsa
{this.state.a}
);
}
每当我点击按钮时,组件A都会被重新命名(我可以在控制台中看到“hello”)
我认为React避免了许多无用的重新渲染。您的父组件正在重新渲染,因为它的状态发生了变化 当组件重新渲染时,其所有子组件都将重新渲染。这意味着渲染函数将运行,结果将添加到虚拟DOM中 然后将此结果与现有DOM进行比较。这并不意味着子组件的实际DOM会发生更改,只是因为DOM可能需要更改,所以会重新计算它们 如果结果证明子元素确实需要更改,则实际DOM中的该元素将重新呈现。如果子元素不需要更改,则DOM中的该元素保持不变 这通常很好,对小型组件的性能影响最小甚至没有,因此通常您不需要担心。
如果你有深层的组件层次结构或具有复杂渲染功能的组件,它们执行计算开销很高的操作,如果你觉得渲染周期是命中的性能,考虑使用<代码> Real.MeMo< <代码>。< /P> < p>因为你的父组件因为它的状态改变而重新渲染。
当组件重新渲染时,其所有子组件都将重新渲染。这意味着渲染函数将运行,结果将添加到虚拟DOM中 然后将此结果与现有DOM进行比较。这并不意味着子组件的实际DOM会发生更改,只是因为DOM可能需要更改,所以会重新计算它们 如果结果证明子元素确实需要更改,则实际DOM中的该元素将重新呈现。如果子元素不需要更改,则DOM中的该元素保持不变 这通常很好,对小型组件的性能影响最小甚至没有,因此通常您不需要担心。如果你有深层的组件层次结构或具有复杂渲染功能的组件,它们执行计算开销很高的操作,如果你觉得渲染周期是一个命中的性能,考虑使用<代码> Real.MeMo < /C>。你认为React避免了很多无用的重新渲染?您是否有要解决的特定编码问题?您在父组件中调用了setState(),这将导致父组件和所有子组件重新渲染。如果父组件重新渲染,子组件将重新渲染,这将在单击按钮时发生,因此您的问题是。。。你认为React避免了很多无用的重新渲染?您是否有要解决的特定编码问题?您在父组件中调用了setState(),这会导致父组件和所有子组件重新渲染。