あなたのアプリケーションロジックがどのように機能するのか分かりませんが、共有していないので、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
で送信することをお勧めしますが、変数は実際には定義されていますが、単に値がないためです。
これはではありません。は、要求したとおりにスライダを無効にします。スライダの元のレンダリング状態を維持するだけです。
チェックボックスをオンにしてもスライダを無効にしたい場合は、ここでいくつかのオプションがあります。ここでは1です:
スプリット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