Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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
每次调用此.setState()时停止ReactJS渲染?_Reactjs - Fatal编程技术网

每次调用此.setState()时停止ReactJS渲染?

每次调用此.setState()时停止ReactJS渲染?,reactjs,Reactjs,每次调用this.setState()get时,如何停止渲染?下面是一个简单的例子,虽然我的应用程序要复杂得多。对于一个简单的游戏,我有一系列的子组件,即:a)更新分数,B)显示按钮,C)显示随机图像的独立组件 每次调用setState()时,它都会渲染所有子组件,我想阻止它渲染至少一个特定组件。我试图用shouldComponentUpdate来概括我的想法,不确定我应该在父组件还是子组件中使用它: var App = React.createClass({ getInitialStat

每次调用
this.setState()
get时,如何停止
渲染?下面是一个简单的例子,虽然我的应用程序要复杂得多。对于一个简单的游戏,我有一系列的子组件,即:a)更新分数,B)显示按钮,C)显示随机图像的独立组件

每次调用
setState()
时,它都会渲染所有子组件,我想阻止它渲染至少一个特定组件。我试图用
shouldComponentUpdate
来概括我的想法,不确定我应该在父组件还是子组件中使用它:

var App = React.createClass({
   getInitialState: function() {
      return {
         isA: false
      };
   },

    handleClick: function() {
        this.refs.SomeComponent.myAction();
        if ( localStorage.showMsg ) {
            this.setState( {isA: true} );   
        } else {
            this.setState( {isA: false} );
        }

    },

   render: function() {
      return (
        <div>
           <SomeComponent handleClick={this.handleClick} ref="SomeComponent" />
           <AnotherComponent />
         </div>
      );
   } 
}); 
var-App=React.createClass({
getInitialState:函数(){
返回{
伊莎:错
};
},
handleClick:function(){
this.refs.SomeComponent.myAction();
if(localStorage.showMsg){
this.setState({isA:true});
}否则{
this.setState({isA:false});
}
},
render:function(){
返回(
);
} 
}); 

shouldComponentUpdate应仅用于优化。因为
render
应该是props和state的函数,如果react希望以随机间隔重新呈现所有内容,则应用程序仍应正常运行。

shouldComponentUpdate
应仅用作优化。因为渲染应该是道具和状态的函数,如果react希望以随机间隔重新渲染所有内容,则应用程序仍应正常运行。

为什么要停止渲染?如果一个组件的道具和状态没有改变,尽管它会呈现,DOM也不会被更新。如果您的
渲染中有一些非常昂贵的干扰
,那么您应该尽一切可能使用
组件shoulldupdate
,记住文档中的警告:

默认情况下,shoulldComponentUpdate始终返回true以防止 当状态发生变化时会出现细微的错误,但如果您小心 始终将状态视为不可变的,并且仅从道具和状态读取 在render()中,您可以使用 将旧的道具和状态与它们的状态进行比较的实现 替代品


如果您担心top-heavy状态,那么您应该查看和以获得一个很好的实现。

为什么要停止渲染?如果一个组件的道具和状态没有改变,尽管它会呈现,DOM也不会被更新。如果您的
渲染中有一些非常昂贵的干扰
,那么您应该尽一切可能使用
组件shoulldupdate
,记住文档中的警告:

默认情况下,shoulldComponentUpdate始终返回true以防止 当状态发生变化时会出现细微的错误,但如果您小心 始终将状态视为不可变的,并且仅从道具和状态读取 在render()中,您可以使用 将旧的道具和状态与它们的状态进行比较的实现 替代品


如果您担心重上加重的状态,您应该查看和以获得一个好的实现。

我在子组件中使用了
shouldComponentUpdate
解决了这个问题,但想知道这是否只是由于父组件中的状态太多造成的。它具有社交共享按钮、教程文本以及游戏组件(播放按钮、随机图像等)的状态。我读到您应该在组件树中将所有状态尽可能放高,可能我做得太过分了?我在子组件中使用了
shouldComponentUpdate
,解决了这个问题,但不知道这是否只是因为父组件中的状态太多。它具有社交共享按钮、教程文本以及游戏组件(播放按钮、随机图像等)的状态。我读到您应该在组件树中将所有状态尽可能放高,可能我做得太过分了?我正在我的
render()
中生成一个随机值,并根据随机值显示不同的图像。我的子组件不做任何其他可能保存和更新状态的操作。一个选项是将随机代码放入父组件中,并将其作为
Props
传递给子组件。另一个选项是使用
Refs
并将rand#code放入调用
setState()
的子组件的方法中,然后通过父组件中的
Refs
调用该方法。我更喜欢使用状态而不是参照,似乎更容易遵循流程。我正在我的
render()
中生成一个随机值,并根据随机值显示不同的图像。我的子组件不做任何其他可能保存和更新状态的操作。一个选项是将随机代码放入父组件中,并将其作为
Props
传递给子组件。另一个选项是使用
Refs
并将rand#code放入调用
setState()
的子组件的方法中,然后通过父组件中的
Refs
调用该方法。我更喜欢使用状态而不是引用,似乎更容易遵循流程。如何实现这一点?是否应该调用两次ComponentUpdate和componentWillReceiveProps,迫使状态和props在第二次调用时保持相同。如何实现这一点?shoulldcomponentupdate和componentWillReceiveProps被调用两次,迫使状态和props在第二次调用时保持相同。