Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果道具和状态没有';不变_Javascript_Reactjs_Rendering - Fatal编程技术网

Javascript 如果道具和状态没有';不变

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" }; }

当React组件的状态或属性保持不变时,它将进行渲染。我不明白为什么它会重新加载/更新,因为结果不会改变

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(),这会导致父组件和所有子组件重新渲染。