每次调用此.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在第二次调用时保持相同。