我拿起上網本的代碼(這是在高高的谷歌搜索結果): https://codepen.io/BuiltByEdgar/pen/jWOVYQ試圖建立一個可控轉換開關按鈕
,但我已經長大惱火它的代碼。
我試圖讓這些按鈕的二重奏默認狀態打開,並且都不允許關閉。我選擇了該UI的行爲是簡單地重新啓用另一個,如果它的兄弟姐妹被關閉:
onONEClick() {
let {
TWO,
ONE,
} = this.state;
if (TWO) {
ONE = !ONE;
} else if (ONE) {
TWO = !TWO;
ONE = !TWO;
} else {
ONE = !ONE;
}
this.setState({
ONE,
TWO,
});
this.props.callBack({
ONE,
TWO,
});
}
onTWOClick() {
let {
TWO,
ONE,
} = this.state;
if (ONE) {
TWO = !TWO;
} else if (TWO) {
TWO = !TWO;
ONE = !ONE;
} else {
TWO = !TWO;
}
this.setState({
ONE,
TWO,
});
this.props.callBack({
ONE,
TWO,
});
}
和渲染:
<div>
<div className="switch-container">
<label>
<input
onChange={this.onONEClick}
type="checkbox"
className="switch"
value={this.state.ONE}
checked={this.state.ONE}
/>
<div>
<span><g className="icon icon-toolbar grid-view" /></span>
<span><g className="icon icon-toolbar ticket-view" /></span>
<div />
</div>
</label>
</div>
ONE
</div>
<div>
<div className="switch-container">
<label>
<input
onChange={this.onTWOClick}
type="checkbox"
className="switch"
value={this.state.TWO}
checked={this.state.TWO}
/>
<div>
<span><g className="icon icon-toolbar grid-view" /></span>
<span><g className="icon icon-toolbar ticket-view" /></span>
<div />
</div>
</label>
</div>
TWO
</div>
夠簡單吧?
,正如你可以看到我已經盡最大努力避免這種情況的發生,但我認爲這根本不是在卡片有一個輸入類型,並改變它的檢查狀態,而不是由人類。
所以我想也許我可以解決這個問題,只需用div重新設置複選框即可。 (標籤標籤還違反ESLint的)
回答JLAITIO:
和這裏就是我加入(該文件的道具聲明和構造頂部):
const propTypes = {
value: React.PropTypes.object,
type: React.PropTypes.string,
callBack: React.PropTypes.func,
ONE: React.PropTypes.bool,
TWO: React.PropTypes.bool,
};
const defaultProps = {
callBack:() => {},
onChange:() => {
},
value: { type: '' },
ONE: true,
TWO: true,
};
class ProviderInfosComponent extends Component {
constructor(props) {
super(props);
const initialValue = props.value;
this.state = {
...initialValue,
ONE: this.props.ONE,
TWO: this.props.TWO,
};
this.onONEClick = this.onONEClick.bind(this);
this.onTWOClick = this.onTWOClick.bind(this);
}
實際上我是這樣做的:對於上下文,這是一個子組件的子組件,它將所有這些狀態組合成一個維護狀態的redux對象。我不知道如果我使用已選中的屬性,我會如何選擇它的狀態,這有可能嗎?如果是的話,我想知道如何 – tatsu
我不知道,如果我完全理解你在做什麼,但從我的理解你可以設置輸入參考道具和閱讀檢查,而不是價值。 'ref = {(ref)=> {this.inputOneRef = ref; }}''this.inputOneRef.checked' – bennygenel