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)
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}?
| 归档时间: |
|
| 查看次数: |
10414 次 |
| 最近记录: |