我不知道你的应用程序逻辑是如何工作的,因为你没有共享它,但是你可以使用shouldComponentUpdate()
来解决这个问题。
如果shouldComponentUpdate回报false
,然后render()
将完全跳过,直至下一个状态变化。另外,componentWillUpdate和componentDidUpdate不会被调用。
所以,你可以这样做:
shouldComponentUpdate(nextProps) {
if(typeof nextProps.value === 'undefined') return false; //return false if value is undefined
return true; //otherwise always return true (this is default)
}
这将防止重新渲染的成分,如果value
是不确定的。虽然我会建议发送null
而不是,因为变量是实际定义的,但没有任何价值。
请注意,这将不会而是根据您的要求禁用滑块 - 它将简单地保持滑块的原始渲染状态。
如果您还希望在复选框被选中时禁用滑块,您可以在这里看到几个选项。这里有一个:
拆分组件到2子组件
这里的想法是,道具直接控制滑块和复选框,不使用state
的。如果您想使用Stateless Functional Components,请查看我的指南,了解如何以及如何使用它。
所以,你的代码将是这样的:
CheckboxSlider:
class CheckboxSlider extends React.Component {
constructor(props, context) {
super(props, context);
this.state = {
value: 50, //default is in the middle, 50%
disabled: false
};
}
_toggleSlider =() => {
this.setState({disabled: !this.state.disabled});
}
render() {
<div>
<Slider value={this.state.value} disabled={this.state.disabled} />
<CheckBox onCheckboxChange={this._toggleSlider} />
</div>
}
}
export default CheckboxSlider;
滑块:
import React from 'react';
const Slider = (props) => (
<input id="slider" type="range" min="0" max="100" disabled={props.disabled} />
);
export default Slider;
复选框:
import React from 'react';
const Checkbox = (props) => (
<input id="checkbox" type="checkbox" onChange={props.onCheckboxChange} />
);
export default Checkbox;
没有任何解决方案,解决或帮助您的问题?如果是这样,请将相应的标记标记为“已接受”。谢谢:) – Chris