- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用下面所示的 ThreeDisplay
React 组件来保存 WebGL/Three.js Canvas ( Canvas 本身不是组件的一部分,它会附加到容器 div
通过初始化脚本)。
我希望组件仅在每次 RUN
和 UPDATE
操作后更新。这些操作由 ThreeDisplay
的父组件分派(dispatch)。
现在,由于某种原因,如果最后一个操作是 FADE_COLOR
或 SWITCH_COLOR
,组件也会更新/重新渲染。这些操作由 ThreeDisplay 调度,它们由鼠标事件触发,如下面的代码所示。
我尝试使用 shouldComponentUpdate()
仅在上述操作之后进行更新。但由于某种原因,这并不能阻止组件在每个鼠标事件上重新渲染。
我的应用程序/原型(prototype)的完整代码可以在this repository中找到
import React from 'react'
import {connect} from 'react-redux'
import {fadeColor, switchColor} from '../actions'
class ThreeDisplay extends React.Component {
shouldComponentUpdate(nextProps) {
const shouldUpdate =
nextProps.lastAction === 'RUN' || nextProps.lastAction === 'UPDATE'
if (!shouldUpdate) {
console.log('ThreeDisplay will not update on ' + nextProps.lastAction)
}
return shouldUpdate
}
componentWillUpdate() {
// This gets logged even if lastAction ist not 'RUN' or 'UPDATE'
console.log('ThreeDisplay will update on ' + this.props.lastAction)
}
render() {
return (
<div
id="container"
className={
this.props.running
? 'three-display'
: 'three-display hidden'
}
onClick={this.props.switchColor}
onMouseMove={this.props.fadeColor}
/>
)
}
}
const mapStateToProps = state => {
return {
running: state.running,
lastAction: state.lastAction
}
}
const mapDispatchTopProps = dispatch => {
return {
fadeColor: e => dispatch(fadeColor(e)),
switchColor: () => dispatch(switchColor())
}
}
export default connect(mapStateToProps, mapDispatchTopProps)(ThreeDisplay)
最佳答案
在这个表达式中
const shouldUpdate = nextProps.lastAction === 'RUN' || 'UPDATE'
如果 nextProps.lastAction === 'RUN'
为 false,则代码将计算 OR 的另一个分支,即仅 'UPDATE'
字符串,其中始终为 true,因此 shouldUpdate
将始终为 true。
替换为
const shouldUpdate = nextProps.lastAction === 'RUN'
|| nextProps.lastAction === 'UPDATE'
关于javascript - React shouldComponentUpdate() 不会阻止重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47389495/
请看一下我的代码。我尝试限制给定无状态组件的重新渲染,但这样做发现 shouldComponentUpdate 永远不会被调用。我已经从 styledComponents 中删除了包装器(之前有人报道
在文档中找不到与此相关的任何内容,我需要对父状态更改进行一些浏览器操作,而不重新渲染子组件。我可以在“shouldComponentUpdate”中执行此操作并让它返回 false,但只是想知道这对服
假设我有一个渲染子项的组件,但这些子项可以通过redux连接或基于计时器的更新组件。父组件不知道这一点。然而,父组件实现了 shouldComponentUpdate 来优化性能。 class Con
如何将 shouldComponentUpdate 用于状态? 我可以检查: shouldComponentUpdate(nextProps, nextState) { return this.s
我试图找出 React 生命周期方法 shouldComponentUpdate 最惯用的实现。我觉得我,可能还有其他人,并没有充分利用这种方法,因为它是可选的。 通常我想检查对象的 props 或
问题 我的父类包含项目列表并为列表中的每个项目呈现组件。当某些项目发生更改(即使只有一个)时,列表中的所有项目都将被重新渲染。 所以我尝试实现shouldComponentUpdate()。我正在使用
我有两个组件。一个是父组件(连接到 redux 的智能组件),另一个是在数组迭代中渲染的子组件。 每当从子组件分派(dispatch)某些 redux 操作时,存储中的状态就会更改,并且重新渲染整个元
我有两个组件。一个是父组件(连接到 redux 的智能组件),另一个是在数组迭代中渲染的子组件。 每当从子组件分派(dispatch)某些 redux 操作时,存储中的状态就会更改,并且重新渲染整个元
我使用 Reflux.connect 方法来改变组件状态,但我无法在 shouldComponentUpdate 中获取 nextState 和 this.state。实际上,当 shouldComp
假设我有一个应该每 6000 毫秒更新一次的 Timestamp 组件。这是基础: class Timestamp extends Component { static propTypes = {
我的 React 类 EventTable 有几种模式,根据模式,它从服务器获取不同的数据并将它们显示到 中。 .我首先让类显示静态数据并且它工作得很好,包括通过来自更高组件的 prop 切换 mo
我在项目中使用 react 运动动画。我通过维护状态解决了每次 Prop 更改时渲染动画的问题。 const {animation} = this.state; if (animati
我的代码有一个组件,它同时接受 props 并有自己的内部状态。 组件应仅在其 Prop 更改时重新渲染。状态更改不应触发重新渲染。 此行为可以通过基于类的组件和自定义 shouldComponent
我有一个像这样的高阶组件 // higherOrderComponent.js const HigherOrderComponent = Component => class extends Reac
LoDash 有精彩的 method _.isEqual。使用以下方法是个好主意吗: shouldComponentUpdate(newProps, newState) { return !_.i
我是 React 新手,只是想问一下组件的状态对象如何更新。经过分析一些代码,我认为: 在更新阶段,状态在 shouldComponentUpdate 方法之后但在 render 方法之前更新,我的理
如果我使用 Immutable.js,react-redux 仍然可以使用 shouldComponentUpdate 吗? connect()方法在shouldComponentUpdate()中使
我的组件加载中有多个 setState。我的页面在单击下拉值时重新呈现,因为单击时我通过 setState 存储这些值。 这里要停止点击时重新渲染,我使用下面的代码。 shouldComponentU
如果我使用 Immutable.js,react-redux 仍然可以使用 shouldComponentUpdate 吗? connect()方法在shouldComponentUpdate()中使
我正在开发一个 React 应用程序,并偶然发现了一种情况,如果我不使用 shouldComponentUpdate() 来阻止,我的组件就会不断地相互更新。我正在尝试确定这是否是处理此类更改的最佳方
我是一名优秀的程序员,十分优秀!