Изучая React, я обнаружил, что по какой-то причине он не работает по-булевски, как я привык, и я не могу понять его.
Я попробовал несколько методов чтобы исправить это, но безуспешно, и я в основном собираюсь отказаться от React. jQuery мне намного проще.
Я понимаю, что React сохраняет ложное значение как строку в состояние и затем интерпретирует его как истинное. Но мне не удалось найти способ сохранить его как логическое значение или преобразовать его в логическое значение.
Слышал ли React о логическом значении?!?!
Посмотрите на скрипку и, пожалуйста, скажи мне, что мне не хватает ... или, по крайней мере, укажи мне правильное направление. Схожу с ума по этому вопросу целый день.
https://jsfiddle.net/nicholas_cb/btye84j2/14/
function Options(props) {
/* TRIED TO FIX IT THIS WAY SO AS TO SET CHECKD VALUES TO BOOLEAN INSTEAD OF STRING AND CHANGING THE CHECKED VALUE TO LOCAL VARIABLES -- OBVIOUSLY DIDN'T WORK... x_X
let optionValue1 = (props.optionValue1 == true);
let optionValue2 = (props.optionValue2 == true);
*/
console.log("Options received: optionValue1 = " + props.optionValue1 + " optionValue2 = " + props.optionValue2);
let result = "Options received: optionValue1 = " + props.optionValue1 + " optionValue2 = " + props.optionValue2;
return (
<div>
<br/>
<label>{result}</label>
<br/><br/>
<label>Option One</label><input name="optionValue1" type="checkbox" checked={props.optionValue1} onChange={props.handleChange}/>
<label>Option Two</label><input name="optionValue2" type="checkbox" checked={props.optionValue2} onChange={props.handleChange}/>
</div>
)
}
class Form extends React.Component {
constructor(props){
super(props)
}
render() {
if(this.props.optionValue1 == true && this.props.optionValue2 == true) {
console.log("TRUE/TRUE");
return (
<Options
optionValue1 = {this.props.optionValue1}
optionValue2 = {this.props.optionValue2}
handleChange = {this.props.handleChange}
/>
)
}
if(this.props.optionValue1 == false && this.props.optionValue2 == true) {
console.log("FALSE/TRUE");
return (
<Options
optionValue1 = {this.props.optionValue1}
optionValue2 = {this.props.optionValue2}
handleChange = {this.props.handleChange}
/>
)
}
if(this.props.optionValue1 == false && this.props.optionValue2 == false) {
console.log("FALSE/FALSE");
return (
<Options
optionValue1 = {this.props.optionValue1}
optionValue2 = {this.props.optionValue2}
handleChange = {this.props.handleChange}
/>
)
}
if(this.props.optionValue1 == true && this.props.optionValue2 == false) {
console.log("TRUE/FALSE");
return (
<Options
optionValue1 = {this.props.optionValue1}
optionValue2 = {this.props.optionValue2}
handleChange = {this.props.handleChange}
/>
)
}
console.log("Matched no case.");
return (
<Options
optionValue1 = {this.props.optionValue1}
optionValue2 = {this.props.optionValue2}
handleChange = {this.props.handleChange}
/>
)
}
}
class FormContainer extends React.Component {
constructor(props) {
super(props)
this.state = {
optionValue1: true,
optionValue2: true,
}
this.handleChange = this.handleChange.bind(this)
}
handleChange(event) {
if(event.target.type == 'checkbox'){
console.log("Checkbox changing: " + event.target.name);
console.log("New value: " + event.target.checked);
event.target.value = event.target.checked;
}
const {name, value} = event.target
this.setState({
[name]: value
})
}
render() {
return (
<Form
handleChange={this.handleChange}
optionValue1={this.state.optionValue1}
optionValue2={this.state.optionValue2}
/>
)
}
}
ReactDOM.render(
<FormContainer />,
document.getElementById('container')
);
Я вывел все случаи на консоль, такие как TRUE / TRUE, FALSE / TRUE et c. Меня также удивляет, что по какой-то причине это не соответствует ни одному делу? Что с этим? Откуда это? Если он интерпретирует это как истину / ложь, не должен ли он всегда соответствовать одному из случаев?
Спасибо