【问题标题】:Checkbox don't show checked复选框不显示已选中
【发布时间】:2019-12-31 09:11:18
【问题描述】:

我正在使用复选框输入。当我点击复选框时,复选框不显示选中,但我仍然得到复选框的值。我使用 React JS

简单的复选框

import React from 'react';
import callApi from './../../utils/apiCaller'
import { Link } from 'react-router-dom'


class ProductActionPage extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            id: '',
            productStatus: ''
        }
    }

    onChange = (e) => {
        var target = e.target;
        var name = target.name;
        var value = target.type === 'checkbox' ? target.checked : target.value;
        this.setState({
            [name]: value
        });
    }

    render() {
        var statusCheckbox = this.state.productStatus === 'true' ? true : false;
        return (
            <div className="row">
                <div className="col-xs-6 col-sm-6 col-md-6 col-lg-6">
                        <div className="form-group">
                            <label>Trang thai: </label>
                        </div>
                        <div className="checkbox">
                            <label>
                                <input type="checkbox" checked={statusCheckbox} name="productStatus" onChange={this.onChange} />
                                Con hang
                            </label>
                        </div>
                        <button type="submit" className="btn btn-primary">Luu lai</button>
                        <Link to="/product/list" className="btn btn-danger ml-5">Huy bo</Link>
                </div>
            </div>
        );
    }

}

如何显示选中的复选框?

【问题讨论】:

  • 我猜this.state.productStatus === 'true' 必须是真的......在您的代码中为state.productStatus 设置的唯一值是''
  • 你的意思是我必须设置 status.productStatus: false or true???
  • 我的意思是要检查复选框,productStatus(使用您的代码)必须完全是字符串 "true" 才能发生这种情况

标签: javascript reactjs checkbox


【解决方案1】:

this.state.productStatus 是一个布尔值,因此您的条件将始终为您提供false,因为您正在比较Boolean === String

改变一下

var statusCheckbox = this.state.productStatus === 'true' ? true : false;

var statusCheckbox = this.state.productStatus ? true : false;   //It doesn't make any sense

或者干脆

var statusCheckbox = this.state.productStatus;

也可以直接使用this.state.productStatus

<input 
   type="checkbox" 
   checked={this.state.productStatus} 
   name="productStatus" 
   onChange={this.onChange} 
/>

【讨论】:

  • 如果我使用 this.state.productStatus,我会收到警告“收到字符串 false 的布尔属性 checked。浏览器会将其解释为真实值。您的意思是选中={false}"
  • @HuyVuThe yes productStatus 是一个string,这里只需将其转为布尔值即可,productStatus :true
  • @HuyVu你可以有初始状态productStatus: false
  • 好的,谢谢,我在数据库中设置状态字段的数据类型是varchar,所以我必须将数据库中的状态数据转换为布尔值,现在,它工作得很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
相关资源
最近更新 更多