在 React JS 中获取复选框状态

Bok*_*oky 6 javascript reactjs

我的代码如下:

 import React from 'react';
import FontAwesome from 'react-fontawesome';
import {Link} from 'react-router';
import { filter_names } from './filterActions';
import _ from 'lodash';

export default class fuel extends React.Component {
    constructor(props){
        super(props);

        this.state = {
            values: {}
        }
    }


    handleFuel(name, event){
        let checkbox = event.target.checked;
        let nValues = _.clone(this.state.values);
        nValues.type = name;
        nValues.active = checkbox;
        this.setState({values: nValues});
    }



    render() {
        const language = this.props.language;

        return (
            <div>
                <div className="priceTitle" style={{padding: '5px 0'}}>{language.fuel}</div>
                <div className="transmissionValues">
                    {_.uniq(this.props.allCarsInTheList.map(i => i.fuel)).map((v, i) => {
                        return (<div key={i}><input type="checkbox" onChange={this.handleFuel.bind(this, v)} checked={true}/> <span>{v}</span></div>);
                    })}
                </div>
                {/*<div className="transmissionValues">
                    <input type="checkbox" onChange={this.handleBenzine.bind(this)} checked={this.getFilterValues().checkboxBenzine}/> <span>Benzine</span>
                </div>*/}
            </div>
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在映射我的数据,并根据燃料场渲染复选框。因此,如果我的数据发生更改,我不想更改代码。但现在我无法检查该复选框是否已选中。

在handleFuel 函数中,我将数据添加到状态,如果复选框更改,状态 ( this.state.values) 应该类似于{type: "Diesel", active: "True"}

然后在渲染中我需要以某种方式使状态处于活动状态。我尝试过类似的东西let checkboxState = Object.keys(this.state.values).length > 0 ? this.state.values.filter(i => i.type === v).active : false;,但没有成功。

有什么建议吗?

更新

let allCarsInTheList = [
    {
        id: 1,
        listID: 3,
        make: "Audi",
        model: "Q5",
        desc: "2.0 CR TDi Comfortline BMT",
        price: 12484,
        mileage: 120021,
        fuel: "Diesel",
        engine: '105/77',
        chassis: "WAUZZZ4G4FN026103"
    }, {
        id: 2,
        listID: 3,
        make: "Audi",
        model: "Q5",
        desc: "2.0 CR TDi Comfortline BMT",
        price: 12484,
        mileage: 120021,
        fuel: "Benzine",
        engine: '105/77',
        chassis: "WAUZZZ4G4FN026103"
    }, {
        id: 3,
        listID: 3,
        make: "Audi",
        model: "Q5",
        desc: "2.0 CR TDi Comfortline BMT",
        price: 12484,
        mileage: 120021,
        fuel: "Diesel",
        engine: '105/77',
        chassis: "WAUZZZ4G4FN026103"
    }, {
        id: 4,
        listID: 3,
        make: "Audi",
        model: "Q5",
        desc: "2.0 CR TDi Comfortline BMT",
        price: 12484,
        mileage: 120021,
        fuel: "Diesel",
        engine: '105/77',
        chassis: "WAUZZZ4G4FN026103"
    }
]
Run Code Online (Sandbox Code Playgroud)

pet*_*and 0

v您不小心将而不是事件传递到您的点击处理程序中。为了帮助避免混淆,我将在 constructor .

this.handleFuel = this.handleFuel.bind(this);
Run Code Online (Sandbox Code Playgroud)

然后你的复选框也变得更容易阅读:

<input type="checkbox" onChange={(e) => this.handleFuel(v, e)} checked={true}/>
Run Code Online (Sandbox Code Playgroud)

ps,应该checked={true}defaultChecked={true}