Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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 不带setState的React push to state变量_Javascript_Reactjs - Fatal编程技术网

Javascript 不带setState的React push to state变量

Javascript 不带setState的React push to state变量,javascript,reactjs,Javascript,Reactjs,最近我一直在开发React应用程序 在一个加载缓慢的页面中,我发现有一些状态更新,以及那些不打算向最终用户显示的变量,这些变量将在稍后引发事件时进行检查 因为这些都是数组,所以我直接对状态和事件进行变异,而不使用“setState”(我知道根本不建议对变量进行变异!)。 后来,当引发事件时,状态变量具有正确的数据,并且由于删除了冗余的“setState”,页面速度显著提高,问题得以解决 有人在react中有过类似的“设置状态”体验吗? 你觉得这个怎么样 …我发现状态有一些更新,这些变量不应该显示

最近我一直在开发React应用程序

在一个加载缓慢的页面中,我发现有一些状态更新,以及那些不打算向最终用户显示的变量,这些变量将在稍后引发事件时进行检查

因为这些都是数组,所以我直接对状态和事件进行变异,而不使用“setState”(我知道根本不建议对变量进行变异!)。 后来,当引发事件时,状态变量具有正确的数据,并且由于删除了冗余的“setState”,页面速度显著提高,问题得以解决

有人在react中有过类似的“设置状态”体验吗? 你觉得这个怎么样

…我发现状态有一些更新,这些变量不应该显示给最终用户

然后它们不应该是状态的一部分,它们应该只是实例上的属性(在基于类的组件中,我假设您正在使用;在函数组件中关闭的变量)<代码>状态应仅包含更改后会导致重新渲染的内容。因此,您应该仅通过
setState
更改它们,以便触发渲染。您违反了规则,因为您所更改的内容与渲染无关


切勿直接改变
状态
对象(或其引用的任何对象)。但您可以改变非状态属性(或您关闭的对象),这很好。

如果您需要将这些变量存储在实际状态中,但它们不必触发渲染,您可能需要实现
shouldComponentUpdate
lyfecycle回调:

shouldComponentUpdate(nextProps, nextState) {
        return nextState.myPropertyThatTriggersRender != this.state.myPropertyThatTriggersRender;
    }
这样,如果选中了触发渲染的所有状态属性,其他状态属性将不会触发渲染。但仍将在状态对象中可用

为了提高性能,可以对要渲染的子元素(如果它们是组件)执行相同的检查

shouldComponentUpdate(nextProps, nextState) {
        return nextProps.myPropThatTriggersRender != this.props.myPropThatTriggersRender;
    }
从React的文档:

使用shouldComponentUpdate()让React知道组件的输出 不受当前状态或道具更改的影响。默认值 行为是在每一个状态改变时重新呈现的,并且在广阔的空间中 大多数情况下,您应该依赖默认行为


您可能希望删除最后一段。这听起来像是一个“过于宽泛”的问题(见),而我认为事实上,没有最后一段,这个问题是完全恰当和可以回答的。(我怀疑这段话是否决票的原因,但这只是猜测。)