gpt4 book ai didi

javascript - 用下拉菜单 react 过滤器项目

转载 作者:数据小太阳 更新时间:2023-10-29 05:02:16 25 4
gpt4 key购买 nike

我正在学习 React 并且想使用下拉列表来过滤列表。我几乎明白了,但我只能单击一次下拉列表,然后列表就会变空。我很确定这是因为我正在过滤列表,然后它返回包含过滤项目的列表。但我不确定如何改变它。

demo

var filterData = [
{ name: 'Matthew', sex: 'male' },
{ name: 'Amanda', sex: 'female' }
];
var FilterForm = React.createClass({
getInitialState: function() {
return {
data: this.props.data,
sex: ''
}
},
handleChange: function(val) {
// problem is here
var filteredData = this.state.data.filter(function(item) {
return item.sex === val;
});
this.setState({sex: val});
this.setState({data: filteredData});
console.log(filteredData);
},
render: function() {
return (
<div className="filter-form">
<h1>Filter Form</h1>
<FilterOptions data={this.state.data} changeOption={this.handleChange} />
<FilterItems data={this.state.data} />
</div>
);
}
});
var FilterOptions = React.createClass({
getInitialState: function() {
return {
data: this.props.data,
sex: ''
}
},
handleChange: function(e) {
var val = e.target.value;
this.setState({bender: val});
this.props.changeOption(val);
},
render: function() {
return (
<select id="sex" value={this.state.sex} onChange={this.handleChange}>
<option value=""></option>
<option value="male">male</option>
<option value="female">female</option>
</select>
);
}
});
var FilterItems = React.createClass({
getInitialState: function() {
return {
data: this.props.data
}
},
render: function() {
return (
<div className="filter-item">
{this.props.data.map(function(item) {
return (
<div>{item.name}</div>
);
})}
</div>
);
}
});
React.render(
<FilterForm data={filterData} />,
document.getElementById('app')
);

最佳答案

因为您的 this.state.data 是在您第一次选择下拉列表时更新的。你应该使用 this.props.data 作为搜索源你可以这样改变:

   handleChange: function(val) {
this.setState({sex: val});
var filteredData;
if(val == ""){
filteredData = this.props.data;
}else{
filteredData = this.props.data.filter(function(item) {
return item.sex === val;
});
}

关于javascript - 用下拉菜单 react 过滤器项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33613504/

25 4 0