React组件filter筛选功能失效,选择尺码后始终显示All如何解决?
问题根因
你遇到的筛选状态始终停留在「All」的问题,不是filterProducts函数的问题,是你写的Filter组件里尺码下拉框的配置错误导致的:
所有尺码对应的<option>标签的value属性都被统一设置成了空字符串"",和「All」选项的value完全一致。不管你选中哪个尺码,下拉框读取到的选中值都是空值,自然会一直匹配到「All」选项,筛选逻辑也无法拿到正确的尺码参数。
修正后的Filter组件代码
你只需要把每个尺码option的value改成对应尺码值即可:
function Filter(props) { return ( <div className="filter"> <div className="filter-result">{props.count} Products</div> <div className="filter-sort"> Order <select value={props.sort} onChange={props.sortProducts}> <option value="latest">Latest</option> <option value="lowest">Lowest</option> <option value="highest">Highest</option> </select> </div> <div className="filter-size"> Filter <select value={props.size} onChange={props.filterProducts}> <option value="">All</option> <option value="XS">XS</option> <option value="S">S</option> <option value="M">M</option> <option value="L">L</option> <option value="XL">XL</option> <option value="XXL">XXL</option> </select> </div> </div> ); }
额外检查项
修改完成后可以再确认两个点:
- 父组件传入的
props.size的取值和上述option的value值保持一致 filterProducts函数中,读取选中尺码的逻辑(一般是e.target.value)和后续的商品尺码匹配逻辑,和上述value值匹配即可
内容的提问来源于stack exchange,提问作者na ha
相关产品推荐
相关产品推荐

